Lassen Sie Vim ALLE Leerzeichen als Charakter anzeigen

772

Ich kann keinen Weg finden, Vim dazu zu bringen, alle Leerzeichen als Charakter anzuzeigen. Ich fand nur Tabulatoren, Leerzeichen usw.

mtk
quelle
14
Ich versuche auch genau dieses Problem zu lösen. Wenn Sie darauf stoßen, verzichten Sie bitte auf eine weitere Antwort :set list. Das beantwortet unsere Frage nicht. (Für andere Ankömmlinge: Die Antwort von mrucci unten ist hilfreich, aber keine echte Lösung .)
ELLIOTTCABLE
1
Für alle, die sagen, dass Leerzeichen sichtbar sind listund listcharsberücksichtigen, dass ein Leerzeichen direkt einer Registerkarte folgt. In dieser Situation wäre es fast unsichtbar. Ich bin damit einverstanden, dass Sie die meisten Situationen erfassen können, aber wenn es schön wäre, alle Räume richtig hervorzuheben.
Kevin Cox
11
Für neue Besucher: Dies ist in neueren Versionen von vim gelöst! Siehe die Antwort von brettanomyces unten .
ELLIOTTCABLE
1
Verwandte (aber Unterschied Stapel): vi.stackexchange.com/questions/422/…
Pureferret

Antworten:

693

Wie andere gesagt haben, könnten Sie verwenden

:set list

was wird, in Kombination mit

:set listchars=...

unsichtbare Zeichen anzeigen.
Jetzt gibt es keine explizite Option , die Sie verwenden können , um zu zeigen , Leerzeichen, aber in listchars, könnten Sie einen Zeichensatz für alles ABER Leerzeichen zu zeigen. Zum Beispiel sieht meine so aus

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

Also, jetzt, nachdem Sie verwendet haben

:set list

Alles, was nicht explizit als etwas anderes angezeigt wird, ist dann wirklich ein einfaches altes Leerzeichen.

listcharsVerwenden Sie wie gewohnt die Hilfe , um zu verstehen, wie dies funktioniert. Es bietet großartige Informationen darüber, welche Zeichen angezeigt werden können (z. B. nachfolgendes Leerzeichen) und wie dies zu tun ist:

:help listchars

Es kann hilfreich sein, einen Umschalter hinzuzufügen, damit Sie die Änderungen während der Bearbeitung leicht sehen können (Quelle: VIM: Set List! Als Umschalter in .vimrc ):

noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>
Turm
quelle
4
"Alles, was nicht explizit als etwas anderes gezeigt wird"? Probieren Sie Unicode-Leerzeichen aus dem Bereich U + 2000..U + 200A aus. Wenn Schriftarten mit fester Breite diese unterstützen, werden sie genauso wie normaler 0x20-Speicherplatz angezeigt.
ZyX
2
@ZyX - Ich habe nicht den gesamten Unicode verwendet, sondern den häufig verwendeten Zeichensatz. Wenn Sie mit der Antwort nicht zufrieden sind, können Sie gerne Verbesserungen vorschlagen.
Turm
20
@ckarbass -: set invlist
Rook
Toller Tipp! Ich empfehle, die Zeile set listchars in die .vimrcDatei einzufügen , damit diese hübsche Art der Anzeige unsichtbarer Zeichen jederzeit problemlos aktiviert werden :set listkann (ohne diese Seite erneut zu googeln).
Melebius
8
@ckarbass Genauso wie Sie alles in vim umschalten - Hinzufügen eines! bis zum Ende. So wird es: Setliste!
275

Ab Patch 7.4.710 können Sie jetzt mithilfe von Listchars ein Zeichen festlegen, das anstelle des Leerzeichens angezeigt wird!

:set listchars+=space:␣

Um ALLE Leerzeichen als Zeichen anzuzeigen, haben Sie folgende Möglichkeiten:

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

Diskussion zur Mailingliste: https://groups.google.com/forum/?fromgroups#!topic/vim_dev/pjmW6wOZW_Q

Brett Y.
quelle
2
Das ist ziemlich cool, aber ich frage mich, warum der Eol-Charakter im Gegensatz zu den anderen nicht anders gefärbt wird.
CMCDragonkai
3
Ich habe es versucht und zuerst einen Fehler bekommen. Es stellte sich heraus, dass "Leerzeichen" in der etwas älteren Version von gvim, die ich verwendete, keine gültige Option war. Ein Upgrade meines gvim hat mein Problem gelöst. :help listcharsGeben Sie für andere, die einen Fehler erhalten, Folgendes ein, um zu überprüfen, ob "Leerzeichen" eine gültige Option für "Listchars" ist. Wenn dies nicht der Fall ist, aktualisieren Sie Ihr vim auf den angegebenen Patch @brettanomyces. Oder lassen Sie "Leerzeichen" einfach aus dem Befehl set heraus, wenn Sie keine Leerzeichen sehen möchten.
Niko Bellic
4
Ich benutze Unicodes Middle Dot (U + 00B7) für Leerzeichen ( space:·), da es wie MS Word, Notepad ++ usw. aussieht
Dinei
1
@ user5359531 Versuchen Sie <ctrl-v> u2334, das Unicode-Open-Box-Zeichen (␣) einzugeben. Siehe sanctum.geek.nz/arabesque/special-characters-in-vim für weitere Details
Brett Y
3
Geben Sie <C-K>.Mvim für ein ·. Siehe :h digraphfür Details.
Johnchen902
252

:set list ermöglichen.

:set nolist Etwas deaktivieren.

Marcin
quelle
11
Vielen Dank, dass Sie uns gezeigt haben, wie Sie zwischen den Modi wechseln können. Sie würden denken, andere fortgeschrittene Antworten würden das lehren.
Jonathan Komar
1
ja das ist hilfreich Ich wünschte, es wäre die beste Antwort, da ich diese Antwort selbst gefunden habe, nur um festzustellen, dass sie bereits auf der Website war, nur aus der Sicht.
Ejoso
8
: set list!ist besser :)
Skippr
@ Skippr In welchem ​​Maße? Es ist dieselbe Anzahl von Tastendrücken, mit der Ausnahme , dass Shiftund !sind beide schwerer zu geben als no. Wenn Sie es in Ihre .vimrc-Datei einfügen, stimme ich zu, dass das Ausrufungsformular leichter zu lesen ist.
Dan Bechard
7
@Dan Wenn Sie dies in relativ kurzer Zeit aus- und wieder einschalten möchten, :set list!tun Sie dies, ohne dass Sie jemals eintreten müssen nolist. Das macht !einfach das Gegenteil von dem, was gerade eingestellt ist. Ich benutze dies die ganze Zeit, besonders wenn mit :set paste!. Ich hasse es, die Pfeiltaste zu drücken, um zu finden :set pasteoder :set nopastelol
skippr
188

Ich denke, andere Antworten hier sind umfassender, aber ich dachte, ich würde einen Trick teilen, den ich normalerweise verwende, um Tabulatoren und Leerzeichen visuell zu unterscheiden:

:syntax on
:set syntax=whitespace

Hierbei handelt es sich um Syntaxhervorhebungsregeln für die Programmiersprache Whitespace. Registerkarten werden in Grün und Leerzeichen in Rot angezeigt . :) :)

Kann :set listwie von vielen anderen Antworten erwähnt kombiniert werden , obwohl die Registerkarten dann als ^ I ohne grünes Higlight angezeigt werden, die Leerzeichen jedoch rot angezeigt werden.

Eliot
quelle
7
Ich mag dieses, es ist ziemlich klug und fühlt sich irgendwie besser an als die meisten anderen Antworten. Nicht wirklich eine Lösung, die immer verwendbar ist.
ComputerDruid
4
Ich bevorzuge konventionellere Methoden, aber ich bin der Meinung, dass dies erfinderisch ist.
Sietse van der Molen
28
Ich wusste, dass Sprache für etwas nützlich sein würde .
Dan Bechard
1
Haben Sie etwas dagegen, auf die .vim-Syntaxdatei zu verlinken, die Sie zum Hervorheben verwenden
SeldomNeedy
2
@SeldomNeedy sollten Sie nichts herunterladen müssen, die Whitespace-Hervorhebungsregeln werden seit Jahren mit Vim ausgeliefert. Sie sollten im Wesentlichen integriert sein, es sei denn, Sie verwenden eine seltsame oder wirklich alte Version von Vim.
Eliot
91

:set listzeigt alle Leerzeichen als Zeichen an. Alles außer einem Raum sieht anders aus als sein normaler Zustand, was bedeutet, dass wenn Sie immer noch einen einfachen alten Raum sehen, es wirklich ein einfacher alter Raum ist. :) :)

Äther
quelle
35
Schalten Sie dies wieder aus mit:set nolist
Greg K
6
Was ist, wenn Sie das Leerzeichen sehen möchten, wie in Sublime Text 2 mit aktiviertem "Leerzeichen anzeigen"? Ich fand es sehr hilfreich.
Olical
Nicht das, wofür ich hierher gekommen bin, aber sehr hilfreich. Vielen Dank.
Harperville
4
Auch Optionen ohne können !am Ende set list!
umgeschaltet werden
Ich benutze dafür einen Einzeiler :se hls | /\_s. Ruft alles ab, während set listLeerzeichen ignoriert werden. Wieder aus mit :se nohls. Details dazu in diesem Beitrag: albertech.blogspot.com/2015/02/…
jar
73

Wenn Sie einstellen:

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

Wenn Sie dann nach einem Leerzeichen suchen, wird jedes Leerzeichen als Unterstreichungszeichen angezeigt.

Sie können diesen Befehl in einer praktischen Funktion verwenden, mit der das "Unterstreichen" von Leerzeichen umgeschaltet wird.

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

Ordnen Sie die Funktion einer Tastenkombination zu:

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

NB: Definieren Sie die Funktion in vimrc, nachdem das Farbschema festgelegt wurde.

mrucci
quelle
1
Nun, es ist ein bisschen ein Hack, aber es ist näher als alles andere bisher. Kopfgeld vergeben! : D
ELLIOTTCABLE
45

Abhängig von Ihren Syntaxregeln für den aktuellen Puffer könnte Folgendes funktionieren:

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

Dies erfordert eine Version 7.3 mit + Verdeckungsfunktion

Update 24.10.2014 Um das ein wenig zu erweitern. Es ist natürlich möglich, einige Hervorhebungen für die verborgenen Zeichen zu definieren.

  • Sie können konfigurieren, wie die verborgenen Zeichen aussehen. Zum Hervorheben müssten Sie mindestens einmal die Hervorhebungsgruppe "Verbergen" konfigurieren (siehe Hilfe unter :h hl-ConcealDies kann in Ihrem Farbschema erfolgen, und Sie müssen es dann nicht erneut konfigurieren. Dies betrifft jedoch alle verborgenen Zeichen (z. B. wenn Ihre Das Syntax-Skript verbirgt einige weitere Elemente. Sie werden als Leerzeichen angezeigt. Das könnte folgendermaßen aussehen:

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

  • Es scheint eine Besonderheit zu geben, dass Vim keine Leerzeichen hervorhebt, wenn das Syntaxskript das skipwhiteSchlüsselwort verwendet. Es wird keinen Weg vorbei geben (vielleicht wird dies behoben, ich habe einen Patch gepostet )

  • Es scheint einen Patch zu geben, mit dem Sie anpassen können, wie Leerzeichen im listModus aussehen . Der letzte zum Zeitpunkt des Schreibens scheint dieser zu sein . (Dies bedeutet, dass Sie Ihr eigenes Vim erstellen müssen, um dies zu verwenden).
  • Die conceallevelund concealcursorsind fensterlokale Optionen. Das bedeutet, dass sie in verschiedenen Fenstern unterschiedlich sein können (und möglicherweise auch durch Dateityp-Plugins oder andere Plugin-Skripte festgelegt werden).
  • Die Syntaxhervorhebungsgruppen müssen immer dann ausgeführt werden, wenn eine Syntaxdefinitionsdatei neu geladen wird. Dies könnte mit einem BufWinEnteroder möglicherweise auch einem Syntaxoder sogar einem FileTypeAutobefehl erfolgen. (Ich habe nicht getestet, welches tatsächlich funktioniert).

Die letzten beiden Elemente bedeuten, dass Sie einige automatische Befehle einrichten müssen, die die Syntaxregeln und die entsprechenden Optionen zurücksetzen. Für den ersten Fall möchten Sie möglicherweise die Hervorhebung mithilfe eines ColorSchemeautomatischen Befehls einrichten (damit die verborgenen Zeichen immer gleich aussehen, unabhängig davon, was ein Farbschema tatsächlich einrichtet). Eine vollständige Lösung finden Sie in der Antwort von romainl, die Ihnen einen Anfang geben sollte. Wenn Sie eine Funktion einrichten, können Sie einfach einen Umschaltbefehl einrichten, um die Anzeige der speziellen Hervorhebung ein- oder auszuschalten.

Update 26.10.2014 Ich habe aus dieser Frage ein Plugin gemacht .

Update 22.04.2015 In Vim wurde ein Patch aufgenommen, der dies mithilfe der listOption ermöglicht. Einfach einstellen set list listchars+=space:␣ Dies funktioniert ab Vim 7.4.711

Christian Brabandt
quelle
Das funktioniert super! Wie kann dies ergänzt werden .vimrc?
Eric Martindale
1
Da dies für den aktuellen Puffer funktioniert, müssen Sie diesen wahrscheinlich in einen automatischen Befehl einschließen. BufEnter oder sogar Syntax Autocommand könnte für Sie arbeiten:
Christian Brabandt
3
Æist eine seltsame Charakterwahl dafür, warum nicht ·?
Marius Gedminas
1
Dies ist eigentlich die richtige Antwort. Irgendwelche Ideen, wie man diesem Zeichen die richtige Syntaxhervorhebung hinzufügt? Ich würde es vorziehen , wenn es sich um eine sehr verblasste · waren
Airstrike
@ChristianBrabandt, Sie haben eine Reihe von nachfolgenden nrrwrgn-bezogenen Dateien, die Ihr Repo verschmutzen.
Romainl
31

ich benutze das

/\s
:set hlsearch

um Leerzeichen hervorzuheben. Es sucht nach allen Leerzeichen und aktiviert dann die Hervorhebung, damit sie herausspringen. Es wird jedoch kein Sonderzeichen gedruckt.

Benedikt Köppel
quelle
Einfachste Lösung imho. Großartig gepaart mit einem Befehl zum Löschen der Suche (ich benutze nnoremap <leader><space> :noh<cr>)
Lenna
24

Wenn Sie mit Leerzeichen das Zeichen '' meinen, wäre mein Vorschlag nur ein Suchen / Ersetzen. Wie die anderen angedeutet haben, set listwerden nicht druckbare Zeichen in sichtbare Zeichen geändert , die in konfiguriert sind listchars.

Um Leerzeichen explizit als ein anderes Zeichen anzuzeigen, sollte etwas Ähnliches wie das Folgende den Trick tun:

:%s/ /█/g

Machen Sie dann einfach die Änderung rückgängig, um wieder zurückzukehren.

(um die █ ich genau diese Tastenfolge gedrückt: :%s/ /CTRL-KFB/g)

Randy Morris
quelle
2
Ich mag das besser als andere Antworten, das sieht :set listfür mich umgekehrt aus und ändert das sichtbare Zeichen ('Leerzeichen') in ein nicht pritierendes (??). Ich frage mich, ob man dieses Insider-Match verwenden kann, zB :match MyBlackBlockChar "appropriate_regexdas sollte den Trick machen, nicht wahr?
Sudhi
Die anderen Antworten sind nützlich, aber dies ist die erste, die tatsächlich OPs Frage +1 beantwortet
Alexx Roche
1
Oder :%s/\s/█/gfür alle Leerzeichen. Auch :set hlsearchPlus :&s/\s//gnkönnte nützlich sein.
16

Um Leerzeichen hervorzuheben, suchen Sie einfach danach:

/ <Leerzeichen>

Anmerkungen:

  • <Leerzeichen> bedeutet, dass Sie nur das Leerzeichen eingeben.
  • Aktivieren Sie die Hervorhebung von Suchergebnissen mit: set hlsearch

    So markieren Sie Leerzeichen und Tabulatoren:

    / [<Leerzeichen> <Tab>]

    Eine schnelle Möglichkeit, die Markierungen zu entfernen, besteht darin, nach etwas anderem zu suchen: / asdf

    (Geben Sie einfach eine kurze Liste zufälliger Zeichen ein)

  • vimmer
    quelle
    1
    Dies ist die gleiche Antwort wie vor 3 Jahren. Außerdem: noh ist schneller als / asdf, um Text hervorzuheben. Oder Sie könnten f1 sogar auf: noh setzen, da Sie es wahrscheinlich oft verwenden werden.
    @DrEval Angenommen , Sie beziehen sich auf Benedikt Köppel Antwort ist es eigentlich auf subtile Weise anders /<space>vs /\s. Ich denke, es ist nicht offensichtlich und schneller, den Vorschlag hier zu verwenden.
    icc97
    14

    Der folgende Code basiert auf der Antwort von Christian Brabandt und scheint zu tun, was das OP will:

    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
    

    Fügen Sie diese Zeilen an Ihre hinzu ~/.vimrcund starten Sie eine neue Vim-Sitzung, um zu sehen, wie die immer noch unvollkommene Magie geschieht.

    Fühlen Sie sich frei, die Standardfarben zu bearbeiten und Zeichen zu verbergen.


    Vorsichtsmaßnahme: Etwas in der *FuncBodySyntaxgruppe in mehreren Sprachen verhindert, dass der mittlere Punkt angezeigt wird. Ich weiß (noch?) Nicht, wie ich diese Lösung zuverlässiger machen kann.

    romainl
    quelle
    Das habe ich mit "abhängig von der Syntaxgruppe" gemeint. Ich vermute, dass dies ein Problem mit Syn-Schlüsselwörtern in Kombination mit dem Skipwhite-Flag ist.
    Christian Brabandt
    @ChristianBrabandt, ja, ich konnte nicht über das hinausgehen, was Sie bereits getan haben, außer es "automatisch" zu machen.
    Romainl
    1
    Ja, es ist das skipwhiteArgument in den Syntaxregeln, das verhindert, dass die Syntaxgruppe übereinstimmt (obwohl es in allen Gruppen enthalten sein sollte).
    Christian Brabandt
    Gibt es eine Möglichkeit, dies mit Indent Guides gut zu machen , wodurch der Einzug Hintergrund erhält ? Ich vermute, es geht darum, dass die Hintergrundfarbe nicht außer Kraft gesetzt wird, aber dies scheint nicht trivial zu sein.
    Mike
    Wie kann ich dasselbe deaktivieren, wenn keine Hervorhebung von Leerzeichen erforderlich ist? Auf der Suche nach einem kurzen Umschaltbefehl.
    Yuvaeasy
    11

    Ich war mit all den anderen Antworten auf diese Frage frustriert, weil keine von ihnen den Raumcharakter auf nützliche Weise hervorhebt. Das Anzeigen von Leerzeichen als Zeichen ist besonders hilfreich für Sprachen im Leerzeichenformat, bei denen das Mischen von Tabulatoren und Leerzeichen schädlich ist.

    Meine Lösung besteht darin, Tabulatoren anzuzeigen und mehrere Leerzeichen zu unterstreichen. Es leiht sich aus Mruccis Antwort und diesem Tutorial . Da die Syntaxhervorhebung verwendet wird, ist sie dauerhaft:

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

    Auf diese Weise werden Registerkarten als |und Leerzeichen als angezeigt _, wodurch es sehr einfach ist zu erkennen, wann ich Codestile mische.

    Der einzige Nachteil, den ich festgestellt habe, ist, dass dieses Snippet die Hintergrundfarbe nicht an den Kontext anpasst (wie in einem Kommentar).

    Wylie
    quelle
    8

    Alle obigen Antworten versuchen, Leerzeichen von vim aus sichtbar zu machen. Wenn Sie wirklich darauf bestehen, sichtbare Räume als Punkte zu haben, gibt es einen anderen Ansatz ...

    Wenn dies in vim nicht möglich ist, ändern Sie Ihre Schriftart vollständig. Ich habe die Ubuntu One Mono-Schriftart kopiert und mit FontForge bearbeitet. Denken Sie daran, den vollständigen Namen, die Familie, die bevorzugte Familie und die kompatible Vollschrift der Schriftart zu ändern (in FontFoge unter TTF-Namen in den Schriftartinformationen), um sie als separate Schriftart zu verwenden. Bearbeiten Sie einfach das Leerzeichen, um einen Punkt in der Mitte zu haben, und speichern Sie die Schriftart in ~ / .fonts. Jetzt können Sie sie für Ihr GVIM oder das gesamte Terminal verwenden ... Ich habe das "!" Zeichen, entfernte die Linie und verschob den Punkt in die Mitte. Es dauerte etwas mehr als 5 Minuten ...

    Hinweis: Das Ändern des Leerzeichens (0x20) führt zu der Unannehmlichkeit, Punkte auf dem gesamten VIM-Bildschirm zu haben ... (aber es werden die Leerzeichen von den Tabulatoren getrennt ...)

    Koch
    quelle
    2
    Das klang nach einem wirklich guten Ansatz, bis ich die Notiz über das Füllen des gesamten Bildschirms mit Punkten las. : /
    friederbluemle
    3
    Punkte für Kreativität! :-)
    jpaugh
    7

    Ich habe aus den vorhandenen Antworten nicht genau das gefunden, was ich wollte. Der folgende Code hebt alle nachfolgenden Leerzeichen hellrot hervor. Fügen Sie einfach Folgendes zu Ihrem hinzu.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
    quelle
    5
    :match CursorLine /\s\+/
    

    Vermeidet das Bit "Sie müssen nach Leerzeichen suchen, damit sie angezeigt werden", aber afaict kann nicht so konfiguriert werden, dass die Leerzeichen nicht hügelig sind. CursorLine kann eine beliebige Hilighting-Gruppe sein und ist im Standarddesign eine einfache Unterstreichung.

    ldrg
    quelle
    Ich kann mit dieser Methode keinen Unterschied zwischen Tabulatoren und Leerzeichen feststellen, was zu schade ist, aber ich finde es toll, dass es sich um einen Einzeiler handelt.
    Rustavore
    5

    Ich mag es, Sonderzeichen zu verwenden, um Leerzeichen anzuzeigen, ist klarer. Sogar eine Karte zum Umschalten ist eine wichtige Funktion für eine schnelle Überprüfung.

    Sie finden diese Funktionen in einem alten vim-Skript, das seit 2004 nicht mehr aktualisiert wurde:

    vim-scripts/[email protected]

    Dank Projekt- Vim-Skripten und Vundle können Sie dieses Plugin wieder zum Leben erwecken

    vim-scripts / cream-showinvisibles @ github

    Noch besser ist, dass meine zwei Cent darin bestehen, eine konfigurierbare Verknüpfung hinzuzufügen (anstatt vordefiniert F4)

    Fügen Sie dies also zu ~ / .vimrc hinzu

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

    Installieren Sie das Plugin auf vim

    :PluginInstall
    

    und los geht's

    Albfan
    quelle
    5

    So decken Sie Unicode-Leerzeichen ab:

    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]')
    

    Das Ergebnis:

    • nur der Ordnungsraum (U + 0020) sieht genauso aus wie ein Leerzeichen (" ")
    • Die Registerkarte (U + 0009) sieht aus wie " │ " (zwei Zeichen: eine lange Pipe und dann ein Ordnungsraum; sie sind grau colorscheme murphy)
    • Das normale Leerzeichen (U + 00A0) sieht aus wie " ·" (ein Zeichen; es ist grau in colorscheme murphy)
    • jedes andere Leerzeichen sieht aus wie rot " "
    Kirill Bulygin
    quelle
    1
    Bearbeitet, um "ctermbg = Red" hinzuzufügen, damit mein Terminal für die Färbung funktioniert. Persönlich habe ich als set listchars=tab:»\ ,space:·Referenz verwendet.
    Johnny Wong
    @ JohnnyWong Danke für das Update. Es wurde ursprünglich von Rezensenten abgelehnt, aber ich habe den Code überprüft und es funktioniert (nicht überraschend) sowohl für gvimals auch vim.
    Kirill Bulygin
    1
    Geniale Antwort, genau das brauchte ich, um enge, nicht unterbrechende Bereiche (Hex 202f) zu erfassen, die in Safari und Firefox nicht gerendert werden.
    Chris Kobrzak
    4

    Du könntest benutzen

    :set list
    

    um die Struktur einer Linie wirklich zu sehen. Sie sehen explizit Registerkarten und Zeilenumbrüche. Wenn Sie ein Leerzeichen sehen, ist es wirklich ein Leerzeichen.

    Tangens
    quelle
    3

    Suche markieren

    :set hlsearch 
    

    in .vimrcdem ist

    und suchen Sie nach Leerzeichen und Wagenrückläufen

    / \|\t\|\r
    

    oder suchen Sie nach allen Leerzeichen

    /\s
    

    der Suche nach allen Nicht-Leerzeichen (die Leerzeichen werden nicht angezeigt, sodass Sie die Leerzeichen zwischen den Wörtern sehen, nicht jedoch die nachfolgenden Leerzeichen).

    /\S
    

    um alle nachfolgenden Leerzeichen anzuzeigen - am Ende der Zeile

    /\s$
    
    MichaelMoser
    quelle
    3

    Behalten Sie diese Hacks in der .vimrc als Kommentare, also in der Shell einfach:

    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
    quelle
    1
    :se list
    :se nolist
    

    :seist genug, :setwird nicht benötigt.

    sjas
    quelle
    1

    Sie können auch die Leerzeichen markieren (die Leerzeichen durch einen Block ersetzen):

    :%s/ /█/g
    

    (vor dem Schreiben rückgängig machen)

    Federico Bucchi
    quelle
    1

    Das Hinzufügen zu meiner .vimrc funktioniert für mich. Stellen Sie nur sicher, dass nichts anderes in Konflikt steht.

    autocmd VimEnter * :syn match space /\s/
    autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black
    
    jroot
    quelle