Antworten:
Wenn []
Sie bei Ihrer Suche den Bereich in einer Zeichenklasse verwenden, sollten Sie in der Lage sein , den hexadezimalen ASCII-Zeichenbereich auszuschließen und daher hlsearch
alle anderen Zeichen außerhalb des ASCII-Bereichs hervorzuheben (vorausgesetzt, Sie haben sie aktiviert) :
/[^\x00-\x7F]
Dies führt zu einer negativen Übereinstimmung (via [^]
) für Zeichen zwischen ASCII 0x00
und ASCII 0x7F
(0-127) und scheint in meinem einfachen Test zu funktionieren. Erweitern Sie für erweitertes ASCII natürlich den Bereich auf \xFF
anstatt zu \x7F
verwenden /[^\x00-\xFF]
.
Sie können es auch dezimal ausdrücken über \d
:
/[^\d0-\d127]
Wenn Sie etwas Spezifischeres benötigen, z. B. den Ausschluss nicht druckbarer Zeichen, müssen Sie diese Bereiche zur Zeichenklasse hinzufügen []
.
Ja, es gibt eine native Funktion zum Hervorheben von übereinstimmenden Zeichenfolgen. Machen Sie in Vim Folgendes:
:help highlight
:help syn-match
syn-match
definiert eine Zeichenfolge, die zu einer Gruppe passt.
highlight
definiert die von der Gruppe verwendete Farbe. Denken Sie nur an die Syntaxhervorhebung für Ihre vimrc-Dateien.
Sie können also die folgenden Befehle in Ihrer .vimrc-Datei verwenden:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
:
Befehle in Ihrem vimrc nicht vor Befehle stellen.
termbg
scheint in VIM 7.3, wie es auf Ubuntu Server 12.10 installiert ist, kein legaler Befehl zu sein.
termbg
scheint dies kein legaler Parameter in VIM 7.3 zu sein, wie er auf Ubuntu Server 12.10 installiert ist.
term
keine Hintergrundfarbe haben, während ein Farbterminal dies cterm
kann.
Für andere (von nun an weniger unglückliche) Leute, die über eine Suchmaschine hier landen und das Hervorheben von Nicht-ASCII-Zeichen nicht erreichen können, versuchen Sie Folgendes (fügen Sie dies in Ihre .vimrc ein):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Dies hat den zusätzlichen Vorteil, dass es nicht mit regulären (auf Dateityp [Dateierweiterung] basierenden) Syntaxdefinitionen kollidiert.
E319: Sorry, the command is not available in this version: au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" Press ENTER or type command to continue
Linux Mint 17.3
containedin=ALL
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL
if
autocmd BufRead ....
in eine Autogruppe in vim einzuschließen, es sei denn, Sie haben einen sehr guten Grund, nicht ...
Dieser Regex funktioniert auch. Es war der erste Google-Hit für "vim entferne Nicht-ASCII-Zeichen" von briceolion.com und mit :set hlsearch
wird hervorgehoben:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gc
welche zuerst hervorhebt und dann ersetzt.
Wenn Sie sich auch für das nicht druckbare interessieren Zeichen verwenden Sie dieses:/[^\x00-\xff]/
Ich benutze es in einer Funktion:
function! NonPrintable()
setlocal enc=utf8
if search('[^\x00-\xff]') != 0
call matchadd('Error', '[^\x00-\xff]')
echo 'Non printable characters in text'
else
setlocal enc=latin1
echo 'All characters are printable'
endif
endfunction
enc
zu fenc
. Ich habe die Codierung geändert, da meine Standardcodierung latin1 ist (war 2013). Die Funktion hebt die nicht druckbaren Zeichen nicht hervor, wenn der Zeichensatz latin1 ist. Um die Hervorhebung zu sehen, müssen Sie den Schlüssel ERROR
in Ihrer Farbsyntaxdatei haben. Dies ist meins:hi Error guifg=Black guibg=Orange
Basierend auf den anderen Antworten zu diesem Thema und der Antwort, die ich hier erhalten habe, habe ich diese zu meiner hinzugefügt .vimrc
, damit ich die Hervorhebung ohne ASCII durch Eingabe steuern kann <C-w>1
. Es werden auch interne Kommentare angezeigt, obwohl Sie die Kommentargruppe für jede verwendete Dateisyntax hinzufügen müssen. Das heißt, wenn Sie eine zsh-Datei bearbeiten, müssen Sie zshComment
sie der Zeile hinzufügen
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
Andernfalls wird das Nicht-ASCII-Zeichen nicht angezeigt (Sie können auch enthalten in = ALL festlegen, wenn Sie sicherstellen möchten, dass Nicht-ASCII-Zeichen in allen Gruppen angezeigt werden). Um zu überprüfen, wie der Kommentar für einen anderen Dateityp aufgerufen wird, öffnen Sie eine Datei des gewünschten Typs, geben Sie :sy
vim ein und suchen Sie in den Syntaxelementen nach dem Kommentar.
function HighlightNonAsciiOff()
echom "Setting non-ascii highlight off"
syn clear nonascii
let g:is_non_ascii_on=0
augroup HighlightUnicode
autocmd!
augroup end
endfunction
function HighlightNonAsciiOn()
echom "Setting non-ascii highlight on"
augroup HighlightUnicode
autocmd!
autocmd ColorScheme *
\ syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment |
\ highlight nonascii cterm=underline ctermfg=red ctermbg=none term=underline
augroup end
silent doautocmd HighlightUnicode ColorScheme
let g:is_non_ascii_on=1
endfunction
function ToggleHighlightNonascii()
if g:is_non_ascii_on == 1
call HighlightNonAsciiOff()
else
call HighlightNonAsciiOn()
endif
endfunction
silent! call HighlightNonAsciiOn()
nnoremap <C-w>1 :call ToggleHighlightNonascii()<CR>
Irgendwie hat keine der oben genannten Antworten für mich funktioniert.
Also habe ich benutzt :1,$ s/[^0-9a-zA-Z,-_\.]//g
Es behält die meisten Charaktere, die mich interessieren.
Jemand hat die Frage bereits beantwortet. Für andere, die immer noch Probleme haben, ist hier eine andere Lösung, um Nicht-ASCII-Zeichen in Kommentaren (oder einer anderen Syntaxgruppe in der Angelegenheit) hervorzuheben. Es ist nicht das Beste, aber es ist eine vorübergehende Lösung.
Man kann versuchen:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
Dies hat Mischteile aus anderen Lösungen. Sie können entfernen contained
, aber aus der Dokumentation kann es ein potenzielles Problem geben, sich selbst zu rekursieren (wie ich verstehe). Um andere definierte Muster anzuzeigen, syn-contains
würde der Abschnitt diese enthalten.
:help syn-containedin
:help syn-contains
Repliziertes Problem von: Setzen Sie das Element auf vim auf eine höhere Hervorhebungspriorität
/[^\d0-\d127]