Làm cho Vim hiển thị TẤT CẢ các khoảng trắng như một nhân vật


772

Tôi không thể tìm cách khiến Vim hiển thị tất cả các khoảng trắng như một nhân vật. Tất cả tôi tìm thấy là về các tab, dấu cách, v.v.


14
Tôi cũng đang cố gắng giải quyết chính xác vấn đề này. Xin vui lòng, nếu bạn gặp phải điều này, hãy kiềm chế không đưa ra một phản ứng khác liên quan :set list. Điều đó không trả lời câu hỏi của chúng tôi. (Đối với những người khác: phản hồi của mrucci Bên dưới là hữu ích, mặc dù không hoàn toàn là một giải pháp thực sự .)
ELLIOTTCABLE

1
Đối với tất cả những người nói rằng không gian có thể nhìn thấy listlistcharsxem xét rằng một không gian đang trực tiếp theo một tab. Nó sẽ gần như vô hình trong tình huống này. Tôi đồng ý rằng bạn có thể nắm bắt hầu hết các tình huống nhưng nếu có thể làm nổi bật tất cả các không gian.
Kevin Cox

11
Đối với khách truy cập mới: Điều này được giải quyết trong các phiên bản mới hơn của vim! Xem câu trả lời của brettanomyces dưới đây .
ELLIOTTCABLE

1
Liên quan (nhưng khác biệt ngăn xếp): vi.stackexchange.com/questions/422/iêng
Pureferret 7/10/2016

Câu trả lời:


693

Như những người khác đã nói, bạn có thể sử dụng

:set list

sẽ kết hợp với

:set listchars=...

hiển thị các ký tự vô hình.
Bây giờ, không có tùy chọn rõ ràng mà bạn có thể sử dụng để hiển thị khoảng trắng, nhưng trong bảng liệt kê, bạn có thể đặt một ký tự hiển thị cho mọi khoảng trắng NHƯNG. Ví dụ, của tôi trông như thế này

:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<

vì vậy, bây giờ, sau khi bạn sử dụng

:set list

tất cả mọi thứ không được hiển thị rõ ràng như một cái gì đó khác, thực sự, là một khoảng trắng cũ đơn giản.

Như thường lệ, để hiểu cách listcharshoạt động, sử dụng trợ giúp. Nó cung cấp thông tin tuyệt vời về những gì ký tự có thể được hiển thị (ví dụ như dấu cách không gian) và cách thực hiện:

:help listchars

Có thể hữu ích khi thêm một chuyển đổi vào nó để bạn có thể thấy các thay đổi giữa chỉnh sửa một cách dễ dàng (nguồn: VIM: set list! Như một chuyển đổi trong .vimrc ):

noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>

4
Có phải mọi thứ không được hiển thị rõ ràng như một thứ gì khác không? Hãy thử các không gian unicode từ phạm vi U + 2000..U + 200A. Nếu phông chữ có chiều rộng cố định hỗ trợ chúng, chúng sẽ được hiển thị như không gian 0x20 bình thường.
ZyX

2
@ZyX - Tôi đã không sử dụng toàn bộ Unicode, nhưng bộ ký tự khá phổ biến đang sử dụng. Nếu bạn không hài lòng với câu trả lời, vui lòng đề xuất cải tiến.
Rook

20
@ckarbass -: thiết lập danh
Rook

Mẹo tuyệt vời! Tôi khuyên bạn nên đặt dòng listchars đã đặt vào .vimrctệp, vì vậy cách hiển thị các ký tự vô hình này có thể dễ dàng được kích hoạt :set listbất cứ lúc nào (mà không cần googling trang này nữa).
Melebius

8
@ckarbass Tương tự như cách bạn chuyển đổi bất cứ thứ gì trong vim - thêm a! đến cuối cùng. Vì vậy, nó trở thành: thiết lập danh sách!

275

Kể từ bản vá 7.4.710, giờ đây bạn có thể đặt một ký tự hiển thị thay cho không gian bằng cách sử dụng bảng liệt kê!

:set listchars+=space:␣

Vì vậy, để hiển thị TẤT CẢ các ký tự khoảng trắng dưới dạng ký tự, bạn có thể làm như sau:

:set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
:set list

Thảo luận về danh sách gửi thư: https://groups.google.com/forum/?fromgroups#!topic/vim_dev/pjmW6wOZW_Q


2
Điều này khá thú vị, nhưng tôi tự hỏi tại sao nhân vật eol không được tô màu khác nhau, không giống như những người khác.
CMCDragonkai

3
Tôi đã thử điều này và đã nhận được một lỗi đầu tiên. Hóa ra "không gian" không phải là một tùy chọn hợp lệ trong phiên bản cũ hơn của gvim mà tôi đang sử dụng. Nâng cấp gvim của tôi đã giải quyết vấn đề của tôi. Đối với những người khác đang gặp lỗi, hãy nhập :help listcharsđể kiểm tra xem "khoảng trắng" có phải là tùy chọn hợp lệ cho "listchars" hay không. Nếu không, hãy nâng cấp vim của bạn lên bản vá @brettanomyces được chỉ định. Hoặc chỉ để lại "khoảng trắng" trong lệnh đã đặt nếu bạn không quan tâm đến khoảng trắng.
Niko Bellic

4
Tôi sử dụng Middle Dot (U + 00B7) của Unicode cho ký tự khoảng trắng ( space:·), vì nó trông giống như MS Word, Notepad ++, v.v.
Dinei

1
@ user5359531 thử <ctrl-v> u2334 để nhập ký tự hộp mở unicode (␣). Xem Sanctuarytum.geek.nz/arabesque/special-char character-in-vim để biết thêm chi tiết
Brett Y

3
<C-K>.Mvào vim cho ·. Xem :h digraphđể biết chi tiết.
johnchen902

252

:set list để kích hoạt.

:set nolist để vô hiệu hóa.


11
Cảm ơn bạn đã chỉ cho chúng tôi cách chuyển đổi giữa các chế độ. Bạn sẽ nghĩ rằng những câu trả lời nâng cao khác sẽ dạy điều đó.
Jonathan Komar

1
vâng điều này rất hữu ích Tôi ước rằng đó là câu trả lời hàng đầu vì tôi chỉ tìm thấy câu trả lời này để thấy rằng nó đã có trên trang web, ngoài tầm nhìn.
Ejoso

8
: set list!tốt hơn :)
Skippr 15/03/2017

@Skippr Bằng biện pháp gì? Đó là cùng một số lần nhấn phím, ngoại trừ điều đó Shift!cả hai đều khó gõ hơn no. Nếu bạn đặt nó trong .vimrc của bạn, tôi đồng ý rằng biểu mẫu exclam dễ đọc hơn.
Dan Bechard

7
@Dan Nếu bạn đang tìm cách tắt và bật trong một thời gian tương đối ngắn, :set list!sẽ làm như vậy mà không bao giờ bạn cần phải nhập nolist. Đơn !giản chỉ cần làm ngược lại với bất cứ điều gì hiện đang được thiết lập. Tôi sử dụng tất cả các thời gian đặc biệt là khi với :set paste!. Tôi ghét nhấn phím mũi tên để tìm :set pastehoặc :set nopastelol
Skippr

188

Tôi nghĩ rằng các câu trả lời khác ở đây toàn diện hơn, nhưng tôi nghĩ tôi sẽ chia sẻ một mẹo mà tôi thường sử dụng để phân biệt các tab và không gian một cách trực quan:

:syntax on
:set syntax=whitespace

Đây là các quy tắc tô sáng cú pháp cho ngôn ngữ lập trình Whitespace - các tab hiển thị màu xanh lá cây và khoảng trắng màu đỏ. :)

Có thể được kết hợp với :set listnhư được đề cập bởi nhiều câu trả lời khác, mặc dù các tab sau đó sẽ hiển thị dưới dạng ^ Tôi không có đèn xanh, nhưng các khoảng trắng sẽ hiển thị màu đỏ.


7
Tôi thích cái này, nó khá thông minh và cảm thấy tốt hơn hầu hết các câu trả lời khác. Tuy nhiên, không thực sự là một giải pháp có thể sử dụng được.
ComputerDruid

4
Tôi thích các phương pháp thông thường hơn, nhưng tôi là 1 trong số này cho tính sáng tạo.
Sietse van der Molen 4/12/13

28
Tôi biết rằng ngôn ngữ sẽ hữu ích cho một cái gì đó .
Dan Bechard

1
Bạn có phiền khi liên kết đến tệp cú pháp .vim mà bạn đang sử dụng để tô sáng
SeldomNeedy

2
@SeldomNeedy bạn không cần phải tải xuống bất cứ thứ gì, các quy tắc tô sáng khoảng trắng đã được gửi với Vim trong nhiều năm. Về cơ bản, chúng nên được tích hợp trừ khi bạn sử dụng phiên bản Vim kỳ lạ hoặc thực sự cũ.
Eliot

91

:set listsẽ hiển thị tất cả các khoảng trắng như một nhân vật. Mọi thứ trừ một không gian sẽ trông khác với trạng thái bình thường của nó, điều đó có nghĩa là nếu bạn vẫn thấy một không gian cũ đơn giản, đó thực sự là một không gian cũ đơn giản. :)


35
Tắt nó lại với:set nolist
Greg K

6
Điều gì sẽ xảy ra nếu bạn muốn xem nhân vật không gian, như trong Sublime Text 2 với "hiển thị khoảng trắng" trên? Tôi thấy nó thực sự hữu ích.
Olical

Không phải những gì tôi đến đây nhưng rất hữu ích. Cảm ơn.
harperville

4
Ngoài ra, các tùy chọn không có thể được đưa ra !ở cuối:set list!
baldrs

Tôi sử dụng một lót, :se hls | /\_scho việc này. Có được mọi thứ trong khi set listbỏ qua không gian. Tắt một lần nữa với :se nohls. Chi tiết về nó trên bài đăng này: albertech.blogspot.com/2015/02/ Kẻ
jar

73

Nếu bạn đặt:

:highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none

và sau đó thực hiện tìm kiếm một khoảng trắng, mọi ký tự khoảng trắng sẽ được hiển thị dưới dạng một ký tự gạch chân.

Bạn có thể sử dụng lệnh này trong một chức năng tiện dụng để bật "dấu gạch dưới" của khoảng trắng.

set hls
let g:HLSpace = 1
let g:HLColorScheme = g:colors_name
function ToggleSpaceUnderscoring()
    if g:HLSpace
        highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none
        let @/ = " "
    else
        highlight clear
        silent colorscheme "".g:HLColorScheme
        let @/ = ""
    endif
    let g:HLSpace = !g:HLSpace
endfunction

Ánh xạ chức năng vào một phím tắt với:

nmap <silent> <F3> <Esc>:call ToggleSpaceUnderscoring()<CR>

NB: Xác định hàm trong vimrc sau khi thiết lập màu sắc.


1
Chà, đó là một chút hack, nhưng nó gần hơn bất cứ thứ gì khác cho đến nay. Tiền thưởng được trao! : D
ELLIOTTCABLE

45

Tùy thuộc vào quy tắc cú pháp của bạn cho bộ đệm hiện tại, một cái gì đó như thế này có thể hoạt động:

:syn match WhiteSpace / / containedin=ALL conceal cchar=Æ
:setl conceallevel=2 concealcursor=nv

Điều này cần một vim 7.3 với tính năng + che giấu

Cập nhật 24/10/2014 Để mở rộng một chút về điều đó. Tất nhiên có thể định nghĩa một số điểm nhấn cho các nhân vật được biểu diễn.

  • Bạn có thể cấu hình, làm thế nào các ký tự che giấu trông. Để làm nổi bật, bạn sẽ phải ít nhất một lần định cấu hình nhóm tô sáng 'Che giấu' (Xem trợ giúp tại :h hl-ConcealĐiều này có thể được thực hiện trong bảng màu của bạn và sau đó bạn không cần phải cấu hình lại lần nữa. Nhưng điều này ảnh hưởng đến tất cả các ký tự bị che giấu (ví dụ: tập lệnh cú pháp che giấu một số mục khác, chúng sẽ được hiển thị dưới dạng ký tự khoảng trắng của bạn). Nó có thể trông như thế này:

    :hi Conceal ctermfg=7 ctermbg=NONE guifg=LightGrey guibg=NONE

  • Dường như có một điều đặc biệt là Vim sẽ không làm nổi bật các khoảng trắng, nếu tập lệnh cú pháp sử dụng skipwhitetừ khóa. Sẽ không có cách nào khác (có lẽ điều này sẽ được khắc phục, tôi đã đăng một bản vá )

  • Dường như có một bản vá nổi xung quanh, sẽ cho phép tùy chỉnh cách các không gian sẽ trông như thế nào trong listchế độ. Cái mới nhất tại thời điểm viết bài dường như là cái này . (Điều này có nghĩa, bạn cần xây dựng Vim của riêng mình để sử dụng cái này).
  • Các conceallevelconcealcursorlà tùy chọn cục bộ cửa sổ. Điều đó có nghĩa là chúng có thể khác nhau trong các cửa sổ khác nhau (và có thể cũng sẽ được đặt bởi các plugin filetype hoặc các tập lệnh plugin khác).
  • Các nhóm tô sáng cú pháp cần được thực thi bất cứ khi nào một tệp định nghĩa cú pháp được tải lại. Điều này có thể được thực hiện bằng cách sử dụng BufWinEntermột Syntaxhoặc thậm chí có thể FileTypetự động. (Tôi chưa thử cái nào thực sự hoạt động).

Hai mục cuối có nghĩa là, bạn sẽ phải thiết lập một số trình tự động tự động đặt lại quy tắc cú pháp và các tùy chọn tương ứng. Đối với cái đầu tiên, người ta có thể muốn thiết lập tô sáng bằng cách sử dụng ColorSchemetự động (để các ký tự được che giấu luôn trông giống nhau, độc lập với những gì một bảng màu thực sự thiết lập). Đối với một giải pháp hoàn chỉnh, hãy xem câu trả lời romainl, điều đó sẽ cho bạn một sự khởi đầu. Nếu bạn thiết lập một chức năng, bạn có thể dễ dàng thiết lập lệnh chuyển đổi để chuyển sang hiển thị bật tắt đặc biệt.

Cập nhật 26/10/2014 Tôi đã tạo một plugin từ câu hỏi này.

Cập nhật 22/11/2015 Một bản vá đã được đưa vào Vim để thực hiện điều này bằng cách sử dụng listtùy chọn. Đơn giản chỉ cần đặt set list listchars+=space:␣ Công cụ này hoạt động kể từ Vim 7.4.711


Điều này làm việc tuyệt vời! Làm thế nào điều này có thể được thêm vào .vimrc?
Eric Martindale

1
Vì cái này hoạt động trên bộ đệm hiện tại, có lẽ bạn cần phải bọc cái này thành một autocommand. Buf Entry hoặc thậm chí Syntax autocommand có thể phù hợp với bạn:
Christian Brabandt

3
Ælà một lựa chọn kỳ lạ của nhân vật cho điều này, tại sao không ·?
Marius Gedminas

1
Đây thực sự là câu trả lời chính xác. Bất kỳ ý tưởng về làm thế nào để thêm đánh dấu cú pháp thích hợp cho nhân vật này? Tôi thích nó hơn nếu nó rất nhạt nhòa ·
cuộc không kích

@ChristianBrabandt, bạn có một loạt các tệp liên quan đến nrrwrgn gây ô nhiễm repo của bạn.
romainl

31

Tôi dùng cái này

/\s
:set hlsearch

để làm nổi bật không gian màu trắng. Nó tìm kiếm tất cả các khoảng trắng, và sau đó cho phép tô sáng để làm cho chúng bật ra. Tuy nhiên, nó không in một ký tự đặc biệt.


Giải pháp đơn giản nhất imho. Tuyệt vời kết hợp với một lệnh để xóa tìm kiếm (tôi sử dụng nnoremap <leader><space> :noh<cr>)
Lenna

24

Nếu theo khoảng trắng bạn có nghĩa là ký tự '', đề xuất của tôi sẽ chỉ là tìm kiếm / thay thế. Như những người khác đã gợi ý, set listthay đổi các ký tự không in thành ký tự hiển thị được định cấu hình listchars.

Để hiển thị rõ ràng các khoảng trắng như một số ký tự khác, một cái gì đó tương tự như bên dưới nên thực hiện thủ thuật:

:%s/ /█/g

Sau đó chỉ cần hoàn tác thay đổi để trở lại một lần nữa.

(để lấy Tôi đã nhấn chuỗi khóa chính xác này :%s/ /CTRL-KFB/g:)


2
Tôi thích điều này tốt hơn các câu trả lời khác, nó giống như nghịch đảo :set listvới tôi, thay đổi ký tự hiển thị ('dấu cách') thành một _non prites_ (??). Tôi tự hỏi nếu một người có thể sử dụng trận đấu bên trong này, ví dụ như :match MyBlackBlockChar "appropriate_regexvậy có nên thực hiện thủ thuật không?
Sudhi

Các câu trả lời khác rất hữu ích, nhưng đây là câu trả lời đầu tiên thực sự trả lời câu hỏi của OP +1
Alexx Roche

1
Hoặc :%s/\s/█/gcho tất cả các khoảng trắng. Ngoài ra, :set hlsearchcộng :&s/\s//gncó thể hữu ích.

16

Để làm nổi bật không gian, chỉ cần tìm kiếm nó:

/ <không gian>

Ghi chú:

  • <dấu cách> có nghĩa là chỉ cần nhập ký tự khoảng trắng.
  • Cho phép tô sáng kết quả tìm kiếm bằng: set hlsearch

    Để tô sáng các khoảng trắng & tab:

    / [<dấu cách> <tab>]

    Một cách nhanh chóng để loại bỏ các điểm nổi bật là tìm kiếm bất cứ thứ gì khác: / asdf

    (chỉ cần nhập bất kỳ danh sách ngắn các ký tự ngẫu nhiên)


  • 1
    Điều này giống như câu trả lời được đăng 3 năm trước. Ngoài ra ,: noh nhanh hơn / asdf cho văn bản không nổi bật. Hoặc thậm chí bạn có thể đặt F1 thành: noh nếu bạn có thể sẽ sử dụng nó thường xuyên.

    @DrEval Giả sử bạn đang đề cập đến câu trả lời của Benedikt Köppel, nó thực sự khác biệt /<space>so với /\s. Tôi nghĩ rằng nó không rõ ràng và nhanh hơn để sử dụng đề xuất ở đây.
    icc97

    14

    Mã dưới đây dựa trên câu trả lời của Christian Brabandt và dường như làm những gì OP muốn:

    function! Whitespace()
        if !exists('b:ws')
            highlight Conceal ctermbg=NONE ctermfg=240 cterm=NONE guibg=NONE guifg=#585858 gui=NONE
            highlight link Whitespace Conceal
            let b:ws = 1
        endif
    
        syntax clear Whitespace
        syntax match Whitespace / / containedin=ALL conceal cchar=·
        setlocal conceallevel=2 concealcursor=c
    endfunction
    
    augroup Whitespace
        autocmd!
        autocmd BufEnter,WinEnter * call Whitespace()
    augroup END
    

    Nối các dòng đó vào của bạn ~/.vimrcvà bắt đầu một phiên Vim mới để xem phép thuật vẫn chưa hoàn hảo xảy ra.

    Hãy thoải mái chỉnh sửa màu sắc mặc định và che giấu nhân vật.


    Hãy cẩn thận: một cái gì đó trong *FuncBodynhóm cú pháp trong một số ngôn ngữ ngăn dấu chấm giữa hiển thị. Tôi không biết (chưa?) Làm thế nào để giải pháp đó đáng tin cậy hơn.


    Đó là điều tôi muốn nói với "tùy thuộc vào nhóm cú pháp" Tôi nghi ngờ đây là sự cố với từ khóa đồng bộ kết hợp với cờ Skipwhite.
    Christian Brabandt

    @ChristianBrabandt, yeah, tôi không thể vượt xa những gì bạn đã làm bên cạnh việc làm cho nó "tự động".
    romainl

    1
    Đúng, đó là skipwhiteđối số trong các quy tắc cú pháp, điều đó ngăn nhóm cú pháp khớp (mặc dù nó phải được phép chứa trong tất cả các nhóm).
    Christian Brabandt

    Có cách nào để làm cho công việc này trở nên độc đáo với Hướng dẫn thụt lề , giúp thêm nền cho thụt lề? Tôi nghi ngờ đây không phải là vấn đề để không ghi đè màu nền, nhưng điều này dường như không tầm thường.
    Mike

    Làm thế nào để vô hiệu hóa tương tự khi không cần làm nổi bật khoảng trắng? Tìm kiếm loại lệnh chuyển đổi ngắn.
    yuvaeasy

    11

    Tôi đã thất vọng với tất cả các câu trả lời khác cho câu hỏi này, bởi vì không ai trong số họ làm nổi bật nhân vật không gian một cách hữu ích. Hiển thị khoảng trắng dưới dạng ký tự sẽ đặc biệt giúp ích cho các ngôn ngữ được định dạng khoảng trắng, trong đó việc trộn các tab và khoảng trắng có hại.

    Giải pháp của tôi là hiển thị các tab và gạch chân nhiều khoảng trắng. Nó mượn từ câu trả lời của mruccihướng dẫn này . Bởi vì nó sử dụng tô sáng cú pháp, nó liên tục:

    set list listchars=tab:\|\ 
    highlight Whitespace cterm=underline gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellow
    autocmd ColorScheme * highlight Whitespace gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellow
    match Whitespace /  \+/
    

    Sử dụng điều này, các tab được hiển thị dưới dạng |và khoảng trắng _, điều này giúp dễ dàng biết được khi tôi trộn các kiểu mã.

    Nhược điểm duy nhất tôi tìm thấy là đoạn trích này không điều chỉnh màu nền để phù hợp với bối cảnh (như trong một nhận xét).


    8

    tất cả các câu trả lời ở trên cố gắng làm cho không gian hiển thị từ bên trong vim. Nếu bạn thực sự khăng khăng muốn có không gian hiển thị dưới dạng dấu chấm, có một cách tiếp cận khác ...

    Nếu nó không thể được thực hiện trong vim, thay đổi hoàn toàn phông chữ của bạn. Tôi đã sao chép phông chữ Ubuntu One Mono và chỉnh sửa nó bằng FontForge. Hãy nhớ thay đổi tên đầy đủ của phông chữ, gia đình, họ ưa thích, đầy đủ tương thích (trong FontFoge, nó nằm dưới Tên TTF trong thông tin phông chữ), để có nó như một phông chữ riêng. Chỉ cần chỉnh sửa ký tự khoảng trắng để có một dấu chấm ở giữa và lưu phông chữ thành ~ / .fonts Bây giờ bạn có thể sử dụng nó cho gvim của bạn hoặc toàn bộ thiết bị đầu cuối ... Tôi đã sao chép "!" ký tự, loại bỏ dòng và di chuyển dấu chấm vào giữa. Phải mất hơn 5 phút ...

    Lưu ý: thay đổi ký tự khoảng trắng (0x20) dẫn đến sự bất tiện khi có các chấm trên toàn bộ màn hình vim ... (nhưng nó sẽ tách các khoảng trắng khỏi các tab ...)


    2
    Điều này nghe có vẻ như là một cách tiếp cận thực sự tốt cho đến khi tôi đọc ghi chú về việc lấp đầy toàn bộ màn hình bằng các dấu chấm. : /
    Friederbluemle 10/2/2015

    3
    Điểm cho sự sáng tạo! :-)
    jpaugh

    7

    Tôi đã không tìm thấy chính xác những gì tôi muốn từ các câu trả lời hiện có. Mã dưới đây sẽ làm nổi bật tất cả các không gian dấu đỏ sáng. Đơn giản chỉ cần thêm những điều sau đây vào.vimrc

    highlight ExtraWhitespace ctermbg=red guibg=red
    match ExtraWhitespace /\s\+$/
    autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
    autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
    autocmd InsertLeave * match ExtraWhitespace /\s\+$/
    autocmd BufWinLeave * call clearmatches()
    

    5
    :match CursorLine /\s\+/
    

    tránh bit "bạn phải tìm kiếm khoảng trắng để làm cho chúng hiển thị" bit nhưng afaict không thể được cấu hình để thực hiện những thứ không bị che khuất vào không gian. CthonLine có thể là bất kỳ nhóm hilighting nào và trong chủ đề mặc định, đó là một gạch chân đơn giản.


    Tôi không thể nói sự khác biệt giữa các tab và khoảng trắng bằng phương pháp này, điều này quá tệ, nhưng tôi thích rằng đó là một lớp lót.
    Rustavore

    5

    Tôi thích sử dụng các ký tự đặc biệt để hiển thị khoảng trắng, rõ ràng hơn. Ngay cả một bản đồ để chuyển đổi là một tính năng chính, để kiểm tra nhanh.

    Bạn có thể tìm thấy các tính năng này trong một tập lệnh vim cũ không được cập nhật kể từ năm 2004:

    vim-scripts/cream-showinvisibles@vim.org

    Cảm ơn vim-scripts dự án và vundle bạn có thể quay lại cuộc sống với plugin này

    vim-scripts / cream-showinvisibles @ github

    Thậm chí tốt hơn, hai xu của tôi về điều này là thêm một phím tắt có thể định cấu hình (thay vì được xác định trước F4)

    vì vậy hãy thêm nó vào ~ / .vimrc

    Plugin 'albfan/cream-invisibles'
    
    let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error
    

    cài đặt plugin trên vim

    :PluginInstall
    

    Và ở đó bạn đi


    5

    Để bao gồm các ký tự khoảng trắng Unicode:

    set list
    set listchars=tab:│\ ,nbsp:·
    highlight StrangeWhitespace guibg=Red ctermbg=Red
    " The list is from https://stackoverflow.com/a/37903645 (with `\t`, `\n`, ` `, `\xa0` removed):
    call matchadd('StrangeWhitespace', '[\x0b\x0c\r\x1c\x1d\x1e\x1f\x85\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]')
    

    Kết quả:

    • chỉ không gian thứ tự (U + 0020) trông giống như một không gian (" ")
    • tab (U + 0009) trông giống như " │ " (hai ký tự: một ống dài và sau đó là không gian thứ tự; chúng có màu xám colorscheme murphy)
    • không gian không phá vỡ thông thường (U + 00A0) trông giống như " ·" (một ký tự; màu xám colorscheme murphy)
    • bất kỳ ký tự khoảng trắng nào khác trông giống như màu đỏ " "

    1
    Đã chỉnh sửa để thêm "ctermbg = Red" để thiết bị đầu cuối của tôi hoạt động để tô màu. Cá nhân tôi đã sử dụng set listchars=tab:»\ ,space:·để bạn tham khảo.
    Johnny Wong

    @JohnnyWong Cảm ơn đã cập nhật. Ban đầu nó bị từ chối bởi những người đánh giá, nhưng tôi đã kiểm tra mã và nó (không ngạc nhiên) hoạt động cả cho gvimvim.
    Kirill Bulygin

    1
    Câu trả lời thú vị, đây chính xác là những gì tôi cần để chụp các không gian hẹp không phá vỡ (Hex 202f) không được hiển thị trong Safari và Firefox.
    Chris Kobrzak

    4

    Bạn đã có thể sử dụng

    :set list
    

    để thực sự thấy cấu trúc của một dòng. Bạn sẽ thấy các tab và dòng mới rõ ràng. Khi bạn thấy một khoảng trống, nó thực sự là một khoảng trống.


    3

    tìm kiếm nổi bật

    :set hlsearch 
    

    trong .vimrcđó là

    và tìm kiếm các tab không gian và lợi nhuận vận chuyển

    / \|\t\|\r
    

    hoặc tìm kiếm tất cả các ký tự khoảng trắng

    /\s
    

    tìm kiếm cho tất cả các ký tự khoảng trắng (ký tự khoảng trắng không được hiển thị, vì vậy bạn thấy các ký tự khoảng trắng giữa các từ, nhưng không phải là các ký tự khoảng trắng ở cuối)

    /\S
    

    để hiển thị tất cả các ký tự khoảng trắng ở cuối dòng - ở cuối dòng

    /\s$
    

    3

    Giữ các bản hack trong .vimrc làm bình luận, vì vậy trong shell, chỉ cần:

    echo '
      " how-to see the non-visible while spaces
      " :set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
      " set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
      " :set list
      " but hei how-to unset the visible tabs ?!
      " :set nolist
      ' >> ~/.vimrc
    

    1
    :se list
    :se nolist
    

    :selà đủ, :setkhông cần thiết


    1

    bạn cũng có thể đánh dấu các khoảng trắng (thay thế các khoảng trắng bằng một khối):

    :%s/ /█/g
    

    (trước khi viết lại)


    1

    Thêm phần này vào .vimrc của tôi hoạt động với tôi. Chỉ cần chắc chắn rằng bạn không có bất cứ điều gì xung đột ..

    autocmd VimEnter * :syn match space /\s/
    autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black
    
    Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
    Licensed under cc by-sa 3.0 with attribution required.