Ich kann Vim nicht dazu bringen, alle Leerzeichen als Zeichen anzuzeigen. Alles, was ich gefunden habe, waren Tabulatoren, Leerzeichen usw.
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>
:set list
zum aktivieren.
:set nolist
zum Deaktivieren.
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
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.
: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. :)
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.
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 )
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.).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).BufWinEnter
oder 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 .
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.
Wenn Sie mit Leerzeichen das Zeichen '' meinen, wäre mein Vorschlag nur ein Suchen/Ersetzen. Wie die anderen angedeutet haben, ändert set list
nicht 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)
Um Leerzeichen hervorzuheben, suchen Sie einfach danach:
/ <Leerzeichen>
Anmerkungen:
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)
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.
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).
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 ...)
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()
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:
│
" (zwei Zeichen: eine lange Pipe und dann ein ordinales Leerzeichen; sie sind in colorscheme murphy
grau)·
" (ein Zeichen; es ist grau in colorscheme murphy
):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.
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:
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
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.
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$
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
sie können die Leerzeichen auch markieren (durch einen Block ersetzen):
:%s/ /█/g
(vor dem Schreiben rückgängig machen)
:se list
:se nolist
:se
ist genug, :set
wird nicht benötigt.
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