Niech Vim pokaże WSZYSTKIE białe spacje jako postać

772

Nie mogę znaleźć sposobu, aby Vim pokazał wszystkie białe pola jako postać. Znalazłem tylko tabulatory, spacje końcowe itp.

Mtk
źródło
14
Próbuję również rozwiązać dokładnie ten problem. Jeśli się z tym spotkasz, powstrzymaj się przed kolejną odpowiedzią :set list. To nie odpowiada na nasze pytanie. (Do innych chętnych: poniższa odpowiedź mrucci jest pomocna, choć nie do końca realne rozwiązanie ).
ELLIOTTCABLE
1
Dla wszystkich, którzy twierdzą, że spacje są widoczne za pomocą listi listcharsuważają, że spacja bezpośrednio pod tabulatorem. W tej sytuacji byłoby prawie niewidoczne. Zgadzam się, że możesz uchwycić większość sytuacji, ale jeśli byłoby miło mieć odpowiednie podświetlenie wszystkich przestrzeni.
Kevin Cox,
11
Dla nowych gości: Zostało to rozwiązane w nowszych wersjach vima! Zobacz Brettanomyces „s odpowiedź poniżej .
ELLIOTTCABLE
1
Powiązane (ale stos różnic): vi.stackexchange.com/questions/422/…
Pureferret,

Odpowiedzi:

693

Jak powiedzieli inni, możesz użyć

:set list

co w połączeniu z

:set listchars=...

wyświetlać niewidoczne znaki.
Teraz nie ma wyraźnej opcji, której można użyć do wyświetlania białych znaków, ale w listach kontrolnych można ustawić znak, aby wyświetlać wszystko, ALE biały. Na przykład mój wygląda tak

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

więc teraz, po użyciu

:set list

wszystko, co nie zostało wyraźnie pokazane jako coś innego, jest więc po prostu zwykłą białą spacją.

Jak zwykle, aby zrozumieć, jak listcharsdziała, skorzystaj z pomocy. Dostarcza świetnych informacji o tym, jakie znaki mogą być wyświetlane (na przykład końcowe spacje) i jak to zrobić:

:help listchars

Pomocne może być dodanie przełącznika, abyś mógł łatwo zobaczyć zmiany w trakcie edycji (źródło: VIM: ustaw listę! Jako przełącznik w .vimrc ):

noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>
Wieża
źródło
4
„Wszystko, co nie zostało wyraźnie pokazane jako coś innego”? Wypróbuj spacje Unicode z zakresu U + 2000..U + 200A. Jeśli czcionka o stałej szerokości obsługuje je, będą wyświetlane tak samo, jak normalna przestrzeń 0x20.
ZyX
2
@ZyX - Nie brałem całego Unicode, ale raczej powszechny zestaw znaków w użyciu. Jeśli nie jesteś zadowolony z odpowiedzi, możesz zaproponować ulepszenia.
Rook
20
@ckarbass -: set invlist
Rook
Świetna wskazówka! Zalecam umieszczenie w pliku linii ustawionych listchars.vimrc , aby ten ładny sposób wyświetlania niewidzialnych znaków mógł być łatwo włączony :set listw dowolnym momencie (bez ponownego przeglądania strony).
Melebius
8
@ckarbass Taki sam sposób przełączania czegokolwiek w vimie - dodawanie! do końca. Staje się więc: ustaw listę!
275

Począwszy od aktualizacji 7.4.710 , możesz teraz ustawić postać, aby wyświetlała się zamiast miejsca za pomocą listchars!

:set listchars+=space:␣

Aby więc wyświetlić WSZYSTKIE białe znaki jako znak, możesz wykonać następujące czynności:

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

Dyskusja na temat listy mailingowej: https://groups.google.com/forum/?fromgroups#!topic/vim_dev/pjmW6wOZW_Q

Brett Y
źródło
2
To całkiem fajne, ale zastanawiam się, dlaczego postać eol nie jest inaczej ubarwiona, w przeciwieństwie do innych.
CMCDragonkai 18.04.16
3
Próbowałem tego i na początku wystąpił błąd. Okazało się, że „spacja” nie była prawidłową opcją w nieco starszej wersji gvima, której używałem. Uaktualnienie mojego gvima rozwiązało mój problem. W przypadku innych, które mają błąd, wpisz, :help listcharsaby sprawdzić, czy „spacja” jest prawidłową opcją dla „listchars”. Jeśli nie jest, zaktualizuj vima do podanej łatki @ brettanomyces. Lub po prostu zostaw „spację” poza poleceniem set, jeśli nie chcesz widzieć spacji.
Niko Bellic,
4
Używam środkowej kropki Unicode (U + 00B7) do znaku spacji ( space:·), ponieważ wygląda jak MS Word, Notepad ++ itp.
Dinei
1
@ user5359531 spróbuj <ctrl-v> u2334, aby wprowadzić znak otwartego pola Unicode (␣). Aby uzyskać więcej informacji, zobacz sanctum.geek.nz/arabesque/special-characters-in-vim
Brett Y
3
Wpisz <C-K>.Mvim dla ·. Zobacz :h digraphszczegóły.
johnchen902,
252

:set list umożliwić.

:set nolist wyłączyć.

Marcin
źródło
11
Dziękujemy za pokazanie nam, jak przełączać tryby. Można by pomyśleć, że nauczyłyby tego inne zaawansowane odpowiedzi.
Jonathan Komar
1
tak, to jest pomocne. Chciałbym, żeby była to najlepsza odpowiedź, ponieważ znalazłem tę odpowiedź, ale okazało się, że była już na stronie, tylko poza zasięgiem wzroku.
Ejoso,
8
: set list!jest lepiej :)
pomiń
@ Skikipr Jakim środkiem? Jest taką samą liczbę naciśnięć klawiszy, poza tym, Shifti !to zarówno trudniej niż typ no. Jeśli umieścisz go w swoim .vimrc, zgadzam się, że formularz wykrzyknika jest łatwiejszy do odczytania.
Dan Bechard
7
@ Dan Jeśli chcesz to wyłączyć i włączyć w stosunkowo krótkim czasie, :set list!zrobisz to bez konieczności wchodzenia nolist. Po !prostu robi odwrotność tego, co jest obecnie ustawione. Korzystam z tego cały czas, szczególnie kiedy :set paste!. Nienawidzę naciskać klawisza strzałki, by znaleźć :set pastelub :set nopastelol
pomiń
187

Myślę, że inne odpowiedzi tutaj są bardziej wyczerpujące, ale pomyślałem, że podzielę się sztuczką, której zwykle używam do wizualnego rozróżnienia tabulatorów i spacji:

:syntax on
:set syntax=whitespace

Są to reguły podświetlania składni dla języka programowania Whitespace - zakładki są wyświetlane na zielono, a spacje na czerwono. :)

Można łączyć z :set list jak wspomniano w wielu innych odpowiedziach, chociaż zakładki będą wówczas wyświetlane jako ^ I bez zielonego podświetlenia, ale spacje będą wyświetlane na czerwono.

Eliot
źródło
7
Podoba mi się ten, jest dość sprytny i czuje się jakoś lepiej niż większość innych odpowiedzi. Jednak nie jest to rozwiązanie, które można cały czas stosować.
ComputerDruid,
4
Wolę bardziej konwencjonalne metody, ale daję +1 za pomysłowość.
Sietse van der Molen
27
Wiedziałem, że język będzie do czegoś przydatny .
Dan Bechard
1
Nie masz nic przeciwko łączeniu się z plikiem składni .vim, którego używasz do wyróżnienia
SeldomNeedy
2
@SeldomNeedy nie musisz niczego pobierać, reguły podświetlania białych znaków są dostarczane z Vimem od lat. Powinny one być zasadniczo wbudowane, chyba że używasz dziwnej lub naprawdę starej wersji Vima.
Eliot,
91

:set listpokaże wszystkie białe znaki jako znaki. Wszystko oprócz przestrzeni będzie wyglądać inaczej niż w normalnym stanie, co oznacza, że ​​jeśli nadal widzisz zwykłą starą przestrzeń, to naprawdę zwykła stara przestrzeń. :)

Eter
źródło
35
Wyłącz to ponownie za pomocą:set nolist
Greg K
6
Co jeśli chcesz zobaczyć znak spacji, jak w Sublime Text 2 z włączoną opcją „pokaż białe znaki”? Uznałem to za bardzo pomocne.
Olical
Nie po to tu przyszedłem, ale bardzo pomocny. Dzięki.
harperville
4
Na !końcu można także przełączać opcje bez opcji :set list!
baldrs,
W tym celu używam jednej wkładki :se hls | /\_s. Pobiera wszystko, a set listignoruje spacje. Wyłącz ponownie z :se nohls. Szczegóły na ten temat w tym poście: albertech.blogspot.com/2015/02/...
jar
73

Jeśli ustawisz:

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

a następnie wykonaj wyszukiwanie spacji, każdy znak spacji zostanie wyświetlony jako znak podkreślenia.

Możesz użyć tego polecenia w przydatnej funkcji, która przełącza „podkreślanie” spacji.

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

Zamapuj funkcję na klawisz skrótu za pomocą:

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

NB: Zdefiniuj funkcję w vimrc po ustawieniu schematu kolorów.

mrucci
źródło
1
Cóż, to trochę hack, ale jest bliżej niż cokolwiek innego do tej pory. Nagroda przyznana! : D
ELLIOTTCABLE
45

W zależności od reguł składni dla bieżącego bufora, coś takiego może działać:

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

Wymaga vim 7.3 z funkcją ukrywania

Zaktualizuj 24.10.2014 r. Aby nieco rozszerzyć tę kwestię . Oczywiście możliwe jest zdefiniowanie niektórych wyróżnień dla ukrytych znaków.

  • Możesz skonfigurować wygląd ukrytych znaków. Aby podświetlić, musisz przynajmniej raz skonfigurować grupę podświetlania „Ukryj” (zobacz pomoc na stronie :h hl-ConcealMożna to zrobić w swoim schemacie kolorów, a następnie nie trzeba go ponownie konfigurować. Ale to wpływa na wszystkie ukryte znaki (np. skrypt składniowy ukrywa kilka dodatkowych elementów, będą one wyświetlane jako białe znaki). Może to wyglądać tak:

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

  • Wygląda na to, że Vim nie wyróżnia spacji, jeśli skrypt składniowy używa skipwhitesłowa kluczowego. Nie będzie odwrotu (być może zostanie to naprawione, opublikowałem łatkę )

  • Wydaje się, że wokół jest łatka, która pozwoli dostosować wygląd przestrzeni w listtrybie. Ostatni z nich w momencie pisania tego tekstu wydaje się być ten jeden . (Oznacza to, że musisz zbudować własnego Vima, aby z niego korzystać).
  • conceallevelI concealcursorsą parapety lokalne opcje. Oznacza to, że mogą się różnić w różnych oknach (i być może zostaną również ustawione przez wtyczki typu pliku lub inne skrypty wtyczek).
  • Grupy wyróżniania składni muszą być wykonywane przy każdym ponownym załadowaniu pliku definicji składni. Można to zrobić za pomocą BufWinEnterewentualnie również Syntaxlub nawet FileTypeautocommand. (Nie testowałem, który z nich faktycznie działa).

Ostatnie dwa elementy oznaczają, że będziesz musiał skonfigurować niektóre polecenia automatyczne, które resetują reguły składni i odpowiednie opcje. Po pierwsze, można ustawić podświetlenie za pomocą polecenia ColorSchemeautomatycznego (tak, aby ukryte znaki zawsze wyglądały tak samo, niezależnie od tego, co faktycznie ustawia schemat kolorów). Aby znaleźć kompletne rozwiązanie, spójrz na odpowiedź romainl, która powinna dać ci początek. Jeśli ustawisz funkcję, możesz łatwo ustawić polecenie przełączania, aby włączyć lub wyłączyć wyświetlanie specjalnego Podświetlania.

Aktualizacja 26.10.2014 Z tego pytania zrobiłem wtyczkę .

Aktualizacja 22.04.2015 W Vimie została dodana łatka, która umożliwia to przy użyciu listopcji. Po prostu ustaw set list listchars+=space:␣ To działa od Vima 7.4.711

Christian Brabandt
źródło
To działa świetnie! Jak można to dodać .vimrc?
Eric Martindale,
1
Ponieważ działa to na bieżącym buforze, prawdopodobnie musisz zawinąć to w komendę automatyczną. BufEnter, a nawet Autocommand Składnia może działać dla Ciebie:
Christian Brabandt
3
Æto dziwny wybór postaci, dlaczego nie ·?
Marius Gedminas
1
To właściwie poprawna odpowiedź. Jakieś pomysły na to, jak dodać właściwe wyróżnianie składni do tego znaku? Wolałbym, gdyby to była bardzo wyblakłe ·
Airstrike
@ChristianBrabandt, masz kilka końcowych plików związanych z nrrwrgn zanieczyszczających twoje repozytorium.
romainl
31

używam tego

/\s
:set hlsearch

aby wyróżnić białe spacje. Wyszukuje wszystkie białe spacje, a następnie włącza podświetlenie, aby je wyskoczyły. Jednakże, nie nie wydrukować specjalny charakter.

Benedikt Köppel
źródło
Najprostsze rozwiązanie imho. Świetnie w połączeniu z poleceniem wyczyszczenia wyszukiwania (używam nnoremap <leader><space> :noh<cr>)
Lenna,
24

Jeśli przez spacje rozumiesz znak „”, moja sugestia to po prostu wyszukiwanie / zamiana. Jak wskazali inni, set listzmienia znaki niedrukowalne na widoczne, skonfigurowane w listchars.

Aby jawnie pokazać spacje jako inną postać, coś podobnego do poniższego powinno załatwić sprawę:

:%s/ /█/g

Następnie po prostu cofnij zmianę, aby wrócić ponownie.

(aby uzyskać █ Nacisnąłem dokładnie ten sekwencję klawiszy: :%s/ /CTRL-KFB/g)

Randy Morris
źródło
2
Podoba mi się to bardziej niż inne odpowiedzi, :set listdla mnie wygląda to odwrotnie , zmieniając widoczną postać („spację”) na _ nie drażniącą_ (??). Zastanawiam się, czy można użyć tego w meczu, np. :match MyBlackBlockChar "appropriate_regexTo powinno załatwić sprawę, prawda?
Sudhi
Inne odpowiedzi są przydatne, ale jest to pierwsza, która faktycznie odpowiada na pytanie OP +1
Alexx Roche
1
Lub :%s/\s/█/gdla wszystkich białych znaków. Przydałby się również :set hlsearchplus :&s/\s//gn.
16

Aby podświetlić spacje, po prostu wyszukaj:

/ <spacja>

Uwagi:

  • <spacja> oznacza po prostu wpisz znak spacji.
  • Włącz podświetlanie wyników wyszukiwania za pomocą: ustaw hlsearch

    Aby podświetlić spacje i tabulatory:

    / [<space> <tab>]

    Szybkim sposobem na usunięcie wyróżnień jest poszukiwanie czegoś innego: / asdf

    (wystarczy wpisać dowolną krótką listę losowych znaków)

  • vimmer
    źródło
    1
    Jest to to samo, co odpowiedź opublikowana 3 lata wcześniej. Ponadto: noh jest szybszy niż / asdf dla odznaczania tekstu. Lub możesz nawet ustawić f1 na: noh, biorąc pod uwagę, że prawdopodobnie będziesz go często używać.
    @DrEval Zakładając, że odwołujesz się do odpowiedzi Benedikta Köppela, w rzeczywistości jest on subtelnie różny w /<space>porównaniu do /\s. Myślę, że skorzystanie z sugestii tutaj nie jest oczywiste i szybsze.
    icc97
    14

    Poniższy kod oparty jest na odpowiedzi Christiana Brabandta i wydaje się robić to, czego chce OP:

    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
    

    Dołącz te linie do swojej ~/.vimrci rozpocznij nową sesję Vima, aby zobaczyć, jak wciąż dzieje się niedoskonała magia.

    Edytuj domyślne kolory i ukryj znak.


    Zastrzeżenie: coś w *FuncBodygrupie składni w kilku językach uniemożliwia wyświetlenie środkowej kropki. Nie wiem (jeszcze?) Jak uczynić to rozwiązanie bardziej niezawodnym.

    romainl
    źródło
    Właśnie to miałem na myśli „w zależności od grupy składni” Podejrzewam, że jest to problem ze słowami kluczowymi syn w połączeniu z flagą skipwhite.
    Christian Brabandt
    @ChristianBrabandt, tak, nie mogłem wyjść poza to, co już zrobiłeś, czyniąc to „automatycznym”.
    romainl
    1
    Tak, jest to skipwhiteargument reguł składni, który uniemożliwia dopasowanie grupy składni (chociaż powinno być dozwolone, aby zawierała się we wszystkich grupach).
    Christian Brabandt
    Czy jest jakiś sposób, aby to ładnie działało dzięki Indent Guides , które dodają tła do wcięć? Podejrzewam, że chodzi o to, aby nie przesłonić koloru tła, ale wydaje się to nietrywialne.
    Mike
    Jak wyłączyć to samo, gdy podświetlanie białych znaków nie jest wymagane? Szukasz rodzaju krótkiej komendy przełączania.
    yuvaeasy
    11

    Byłem sfrustrowany wszystkimi pozostałymi odpowiedziami na to pytanie, ponieważ żadna z nich nie uwydatnia znaku spacji w użyteczny sposób. Wyświetlanie spacji jako znaków byłoby szczególnie pomocne w przypadku języków sformatowanych spacjami, w których mieszanie tabulatorów i spacji jest szkodliwe.

    Moim rozwiązaniem jest wyświetlanie tabulatorów i podkreślanie wielu spacji. Pożycza od odpowiedzi Mrucciego i tego poradnika . Ponieważ używa podświetlania składni, jest trwały:

    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 /  \+/
    

    Używając tego, tabulatory są wyświetlane jako |i spacje jako _, co bardzo ułatwia stwierdzenie, kiedy mieszam style kodu.

    Jedynym minusem, jaki znalazłem, jest to, że ten fragment kodu nie dopasowuje koloru tła do kontekstu (jak w komentarzu).

    Wylie
    źródło
    8

    wszystkie powyższe odpowiedzi starają się, aby spacje były widoczne z poziomu vima. Jeśli naprawdę nalegasz, aby widoczne kropki były widoczne, istnieje inne podejście ...

    Jeśli nie można tego zrobić w vimie, zmień czcionkę całkowicie. Skopiowałem czcionkę Ubuntu One Mono i edytowałem ją za pomocą FontForge. Pamiętaj, aby zmienić pełną nazwę czcionki, rodzinę, preferowaną rodzinę, pełną kompatybilną (w FontFoge jest pod nazwami TTF w informacjach o czcionce), aby mieć osobną czcionkę. Po prostu edytuj znak spacji, aby mieć kropkę na środku i zapisz czcionkę w ~ / .fonts Teraz możesz użyć go dla swojego gvima lub całego terminalu ... Skopiowałem „!” znak, usunął linię i przesunął kropkę na środek. Zajęło to nieco ponad 5 minut ...

    Uwaga: zmiana znaku spacji (0x20) powoduje niedogodności związane z posiadaniem kropek na całym ekranie vim ... (ale spowoduje to oddzielenie spacji od tabulatorów ...)

    szef kuchni
    źródło
    2
    To brzmiało jak bardzo dobre podejście, dopóki nie przeczytałem notatki o wypełnieniu całego ekranu kropkami. : /
    friederbluemle
    3
    Punkty za kreatywność! :-)
    jpaugh
    7

    Z istniejących odpowiedzi nie znalazłem dokładnie tego, czego chciałem. Poniższy kod podświetli wszystkie spacje końcowe na czerwono. Po prostu dodaj następujące elementy do swojego.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()
    
    thedanotto
    źródło
    5
    :match CursorLine /\s\+/
    

    unika się fragmentu „musisz szukać spacji, żeby się pojawili”, ale afaict nie może być skonfigurowany do robienia rzeczy nie oświetlających przestrzeni. CursorLine może być dowolną grupą oświetleniową, aw domyślnym motywie jest to zwykłe podkreślenie.

    ldrg
    źródło
    Nie potrafię odróżnić tabulatorów od spacji przy użyciu tej metody, co jest bardzo złe, ale uwielbiam to, że jest to jedna linijka.
    Rustavore
    5

    Lubię używać znaków specjalnych do wyświetlania białych znaków, jest bardziej przejrzysta. Nawet przełączanie mapy jest kluczową funkcją umożliwiającą szybkie sprawdzenie.

    Możesz znaleźć te funkcje w starym skrypcie vim, nie aktualizowanym od 2004 roku:

    vim-scripts/[email protected]

    Dzięki skryptom vim projektu i vundle projektu możesz przywrócić tę wtyczkę do życia

    vim-scripts / cream-showinvisibles @ github

    Co więcej, moje dwa centy na tym polega na dodaniu konfigurowalnego skrótu (zamiast predefiniowanego F4)

    więc dodaj to do ~ / .vimrc

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

    zainstaluj wtyczkę na vimie

    :PluginInstall
    

    i proszę bardzo

    albfan
    źródło
    5

    Aby zakryć znaki białych znaków 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]')
    

    Wynik:

    • tylko przestrzeń porządkowa (U + 0020) wygląda jak spacja („ ”)
    • tabulator (U + 0009) wygląda jak „ │ ” (dwa znaki: długa rura, a następnie spacja porządkowa; są szare colorscheme murphy)
    • normalna spacja niełamliwa (U + 00A0) wygląda jak „ ·” (jedna postać; jest szara colorscheme murphy)
    • każda inna biała spacja wygląda jak czerwony „
    Kirill Bulygin
    źródło
    1
    Edytowano, aby dodać „ctermbg = Red”, aby mój terminal działał dla kolorowania. Osobiście użyłem w set listchars=tab:»\ ,space:·celach informacyjnych.
    Johnny Wong
    @JohnnyWong Dzięki za aktualizację. Został początkowo odrzucony przez recenzentów, ale sprawdziłem kod i (co nie jest zaskoczeniem) działa zarówno dla, jak gvimi dla vim.
    Kirill Bulygin
    1
    Świetna odpowiedź, właśnie tego potrzebowałem, aby uchwycić wąskie przestrzenie non-break (Hex 202f), które nie są renderowane w Safari i Firefox.
    Chris Kobrzak,
    4

    Możesz użyć

    :set list
    

    aby naprawdę zobaczyć strukturę linii. Zobaczysz wyraźnie karty i znaki nowej linii. Kiedy widzisz puste miejsce, to naprawdę jest puste.

    tangens
    źródło
    3

    zaznacz wyszukiwanie

    :set hlsearch 
    

    w .vimrctym jest

    i szukaj spacji i znaków powrotu karetki

    / \|\t\|\r
    

    lub wyszukaj wszystkie znaki spacji

    /\s
    

    wyszukiwania wszystkich znaków innych niż białe znaki (znaki białych znaków nie są wyświetlane, więc między słowami widać znaki białych znaków, ale nie końcowe znaki białych znaków)

    /\S
    

    aby pokazać wszystkie końcowe białe znaki - na końcu linii

    /\s$
    
    MichaelMoser
    źródło
    2

    Trzymaj te hacki w .vimrc jako komentarze, więc w powłoce po prostu:

    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
    
    Yordan Georgiev
    źródło
    1
    :se list
    :se nolist
    

    :sewystarczy, :setnie jest potrzebne.

    sjas
    źródło
    1

    możesz także podświetlić spacje (zastępując je blokiem):

    :%s/ /█/g
    

    (przed napisaniem cofnij to)

    Federico Bucchi
    źródło
    1

    Dodanie tego do mojego .vimrc działa dla mnie. Tylko upewnij się, że nie masz nic innego sprzecznego ...

    autocmd VimEnter * :syn match space /\s/
    autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black
    
    Jroot
    źródło