it-swarm.com.de

Lässt Vim ALLE Leerzeichen als Zeichen anzeigen

Ich kann Vim nicht dazu bringen, alle Leerzeichen als Zeichen anzuzeigen. Alles, was ich gefunden habe, waren Tabulatoren, Leerzeichen usw.

724
Matt

Wie andere gesagt haben, könnten Sie verwenden

:set list

was wird, in Kombination mit

:set listchars=...

unsichtbare Zeichen anzeigen.
Nun gibt es keine explizite Option, mit der Sie Whitespace anzeigen können, aber in Listchars können Sie ein Zeichen festlegen, das für alles, ABER Whitespace angezeigt wird. Zum Beispiel sieht meins so aus

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

also, jetzt, nachdem du es benutzt hast

:set list

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

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

:help listchars

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

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

:set list zum aktivieren.

:set nolist zum Deaktivieren.

243
Marcin

Ab Patch 7.4.71 können Sie jetzt mithilfe von Listenzeichen ein Zeichen festlegen, das anstelle des Leerzeichens angezeigt werden soll!

: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

240
Brett Y

Ich denke, dass andere Antworten hier umfassender sind, 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 Registerkarten Whitespace-Programmiersprache -, die in Grün und Leerzeichen in Rot angezeigt werden. :)

Kann mit :set list kombiniert werden, wie in vielen anderen Antworten erwähnt. Die Registerkarten werden dann zwar als ^ I ohne grünes Higlight angezeigt, die Leerzeichen werden jedoch in Rot angezeigt.

176
Eliot

:set list zeigt alle Leerzeichen als Zeichen an. Alles aber ein 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. :)

88
Ether

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, die das "Unterstreichen" von Leerzeichen umschaltet.

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 mit:

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

NB: Definiere die Funktion in vimrc nachdem das Farbschema eingestellt wurde.

73
mrucci

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 ein vim 7.3 mit der Funktion + verbergen

Update 24.10.2014 Um das etwas 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-Conceal Dies kann in Ihrem Farbschema durchgeführt werden und muss dann nicht erneut konfiguriert werden. Dies wirkt sich jedoch auf alle verdeckten Elemente aus Zeichen (zB wenn Ihr Syntax-Skript weitere Elemente verbirgt, werden diese als Leerzeichen angezeigt.) Das könnte so 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 Schlüsselwort skipwhite verwendet. Es wird keinen Ausweg geben (vielleicht wird das behoben, ich habe einen Patch gepostet )

  • Es scheint einen Patch zu geben, der es erlaubt anzupassen, wie Leerzeichen im list -Modus aussehen. Der letzte zum Zeitpunkt des Schreibens scheint dieser zu sein . (Dies bedeutet, dass Sie Ihr eigenes Vim erstellen müssen, um dies zu nutzen.).
  • Die Optionen conceallevel und concealcursor sind lokale Fensteroptionen. Das bedeutet, dass sie in verschiedenen Fenstern unterschiedlich sein können (und möglicherweise auch durch Dateityp-Plugins oder andere Pluginskripte festgelegt werden).
  • Die Syntaxhervorhebungsgruppen müssen immer dann ausgeführt werden, wenn eine Syntaxdefinitionsdatei neu geladen wird. Dies könnte unter Verwendung eines BufWinEnteroder möglicherweise auch eines Syntax oder sogar eines FileType Autobefehls erfolgen. (Ich habe nicht getestet, welches tatsächlich funktioniert).

Die letzten beiden Punkte bedeuten, dass Sie einige Autobefehle einrichten müssen, die die Syntaxregeln und die entsprechenden Optionen zurücksetzen. Zum einen kann es sinnvoll sein, die Hervorhebung mit einem automatischen Befehl ColorScheme einzurichten (damit die verborgenen Zeichen immer gleich aussehen, unabhängig davon, was ein Farbschema tatsächlich erstellt). Um eine vollständige Lösung zu erhalten, schauen Sie in die Antwort von romainl, die Ihnen einen Anfang geben sollte. Wenn Sie eine Funktion einrichten, können Sie ganz einfach einen Umschaltbefehl einrichten, um die Anzeige spezieller Hervorhebungen ein- oder auszuschalten.

Update 26.10.2014 Ich habe aus dieser Frage ein Plugin gemacht.

Update 22.04.2015 Vim enthält einen Patch, der dies mit der Option list ermöglicht. Einfach set list listchars+=space:␣ einstellen. Dies funktioniert ab Vim 7.4.711 .

45

Ich benutze das

/\s
:set hlsearch

leerzeichen hervorheben. Es sucht nach allen Leerzeichen und aktiviert dann die Hervorhebung, damit sie herausspringen. Es gibt jedoch nicht ein Sonderzeichen aus.

30

Wenn Sie mit Leerzeichen das Zeichen '' meinen, wäre mein Vorschlag nur ein Suchen/Ersetzen. Wie die anderen angedeutet haben, ändert set listnicht druckbar Zeichen in ein sichtbares Zeichen, das in listchars konfiguriert ist.

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

:%s/ /█/g

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

(um das █ zu bekommen habe ich genau diese Tastenfolge gedrückt: :%s//CTRL-KFB/g)

22
Randy Morris

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 von zufälligen Zeichen ein)

  • 16
    vimmer

    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
    

    Hänge diese Zeilen an deinen ~/.vimrc an und starte eine neue Vim-Sitzung, um zu sehen, wie immer noch unvollkommen Magie passiert.

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


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

    14
    romainl

    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 insbesondere für Sprachen mit Leerzeichen hilfreich, 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 dieses Tutorial . Da Syntaxhervorhebung verwendet wird, ist es 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, was es sehr einfach macht, festzustellen, 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).

    11
    Wylie

    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 den kompatiblen vollständigen Namen der Schrift zu ändern (in FontFoge steht er unter TTF-Namen in der Schriftinfo), um sie als separate Schrift zu erhalten. Bearbeiten Sie einfach das Leerzeichen, um einen Punkt in der Mitte zu haben, und speichern Sie die Schrift unter ~/.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 Unannehmlichkeiten, wenn Punkte auf dem gesamten Bildschirm angezeigt werden ... (die Leerzeichen werden jedoch von den Tabulatoren getrennt ...)

    8
    chef

    Ich habe aus den vorhandenen Antworten nicht genau das gefunden, was ich wollte. Der folgende Code hebt alle nachfolgenden Bereiche hellrot hervor. Fügen Sie einfach Folgendes zu Ihrem .vimrc hinzu

    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()
    
    7
    thedanotto

    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 das ordinale Leerzeichen (U + 0020) sieht aus wie ein Leerzeichen ("")
    • der Tabulator (U + 0009) sieht aus wie "│ " (zwei Zeichen: eine lange Pipe und dann ein ordinales Leerzeichen; sie sind in colorscheme murphy grau)
    • das normale nicht unterbrechende Leerzeichen (U + 00A0) sieht aus wie "·" (ein Zeichen; es ist grau in colorscheme murphy)
    • jedes andere Leerzeichen sieht aus wie rot ""
    5
    Kirill Bulygin
    :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 beleuchtet werden. CursorLine kann eine beliebige Hilfslichtgruppe sein, und im Standardthema ist es eine einfache Unterstreichung.

    5
    ldrg

    Ich verwende gerne Sonderzeichen, um Leerzeichen anzuzeigen, das ist klarer. Sogar eine Karte zum Umschalten ist ein Schlüsselmerkmal 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 project vim-scripts und vundle können Sie dieses Plugin wieder zum Leben erwecken

    vim-scripts/cream-showinvisibles @ github

    Noch besser, meine zwei Cent auf diesem ist das Hinzufügen eines konfigurierbare Verknüpfung (anstelle von vordefinierten F4)

    also füge dies zu ~/.vimrc hinzu

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

    plugin auf vim installieren

    :PluginInstall
    

    und los geht's

    5
    albfan

    Du könntest benutzen

    :set list
    

    die Struktur einer Linie wirklich sehen. Sie sehen Tabs und Newlines explizit. Wenn Sie ein Leerzeichen sehen, ist es wirklich ein Leerzeichen.

    4
    tangens

    suche markieren

    :set hlsearch 
    

    in .vimrc das ist

    und suchen Sie nach Leerzeichen und Zeilenumbrüchen

    / \|\t\|\r
    

    oder suchen Sie nach allen Leerzeichen

    /\s
    

    bei der Suche nach allen Zeichen, die keine Leerzeichen sind

    /\S
    

    um alle nachgestellten Leerzeichen anzuzeigen - am Ende der Zeile

    /\s$
    
    3
    MichaelMoser

    Behalte diese Hacks in der .vimrc als Kommentar, 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
    
    3
    Yordan Georgiev

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

    :%s/ /█/g
    

    (vor dem Schreiben rückgängig machen)

    1
    Federico Bucchi
    :se list
    :se nolist
    

    :se ist genug, :set wird nicht benötigt.

    1
    sjas

    Das zu meinem .vimrc hinzuzufügen funktioniert für mich. Stellen Sie nur sicher, dass Sie keine anderen Konflikte haben.

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