Odpowiedzi:
Używając zakresu w []
klasie znaków w swoim wyszukiwaniu, powinieneś być w stanie wykluczyć zakres znaków szesnastkowych ASCII, dlatego podświetlając (zakładając, że hlsearch
włączyłeś) wszystkie inne znaki spoza zakresu ASCII:
/[^\x00-\x7F]
Spowoduje to dopasowanie negatywne (przez [^]
) dla znaków między ASCII 0x00
i ASCII 0x7F
(0-127) i wydaje się działać w moim prostym teście. W przypadku rozszerzonego ASCII, oczywiście, rozszerz zakres do \xFF
zamiast \x7F
używać /[^\x00-\xFF]
.
Możesz również wyrazić to w postaci dziesiętnej za pomocą \d
:
/[^\d0-\d127]
Jeśli potrzebujesz czegoś bardziej szczegółowego, na przykład wykluczenia niedrukowalnych znaków, będziesz musiał dodać te zakresy do klasy znaków []
.
Tak, istnieje natywna funkcja do podświetlania dowolnych dopasowanych ciągów. Wewnątrz Vima zrób:
:help highlight
:help syn-match
syn-match
definiuje ciąg, który pasuje do grupy.
highlight
określa kolor używany przez grupę. Pomyśl tylko o podświetlaniu składni w plikach vimrc.
Możesz więc użyć poniższych poleceń w swoim pliku .vimrc:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
:
przed komendami w swoim vimrc.
termbg
nie wydaje się być legalnym poleceniem w VIM 7.3 zainstalowanym na Ubuntu Server 12.10.
termbg
nie wydaje się być legalnym parametrem w VIM 7.3 zainstalowanym na Ubuntu Server 12.10.
term
nie może mieć koloru tła, podczas gdy terminal kolorowy cterm
może.
Dla innych (od teraz mniej pechowych) ludzi, którzy trafiają tutaj przez wyszukiwarkę i nie mogą wykonać podświetlania znaków spoza ASCII, spróbuj tego (umieść to w swoim .vimrc):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Ma to tę dodatkową zaletę, że nie koliduje ze zwykłymi (opartymi na typie pliku [rozszerzenie pliku]) definicjami składni.
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
na koniec ostatniej linii, tworząc ją au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL
. Uważam, że warto go rozproszenia (gdy Unicode jest dozwolone), oryginalna odpowiedź tutaj nie nie złapać rzeczy, takich jak kod spoza ASCII wewnętrznej w if
oświadczeniu ...
autocmd BufRead ....
grupę w autogrupie w vimie, chyba że masz bardzo dobry powód, aby nie ...
To wyrażenie regularne również działa. To był pierwszy hit Google dotyczący „vim remove non-ascii characters” z briceolion.com i wyróżni:set hlsearch
:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gc
która najpierw podkreśla, a potem zastępuje.
Jeśli interesują Cię również znaki niedrukowalne, użyj tego:/[^\x00-\xff]/
Używam go w funkcji:
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
na fenc
. Zmieniłem kodowanie, ponieważ moje domyślne kodowanie to (było w 2013) latin1. Funkcja nie wyróżnia znaków niedrukowalnych, jeśli zestaw znaków to latin1. Aby zobaczyć wyróżnienie, musisz mieć klucz ERROR
w pliku składni kolorów. To jest moje:hi Error guifg=Black guibg=Orange
Na podstawie innych odpowiedzi na ten temat i odpowiedzi, którą tutaj otrzymałem , dodałem to do mojego .vimrc
, aby móc sterować podświetlaniem innym niż ASCII, wpisując <C-w>1
. Pokazuje również komentarze wewnątrz, chociaż będziesz musiał dodać grupę komentarzy dla każdej składni pliku, której będziesz używać. Oznacza to, że jeśli będziesz edytować plik zsh, będziesz musiał dodać zshComment
do linii
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
w przeciwnym razie nie pokaże znaku spoza ASCII (możesz również ustawić wartość includedin = ALL, jeśli chcesz mieć pewność, że we wszystkich grupach są wyświetlane znaki spoza zestawu ASCII). Aby sprawdzić, jak wywoływany jest komentarz w innym typie pliku, otwórz plik żądanego typu i wejdź :sy
do vim, a następnie wyszukaj komentarz w elementach składni.
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>
Jakoś żadna z powyższych odpowiedzi nie zadziałała dla mnie.
Więc użyłem :1,$ s/[^0-9a-zA-Z,-_\.]//g
Utrzymuje większość interesujących mnie postaci.
Ktoś już odpowiedział na pytanie. Jednak dla innych, którzy nadal mają problemy, oto inne rozwiązanie, aby wyróżnić znaki spoza ASCII w komentarzach (lub dowolnej grupie składni w tej sprawie). To nie jest najlepsze, ale to tymczasowe rozwiązanie.
Można spróbować:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
Ma to połączenie części z innych rozwiązań. Możesz usunąć contained
, ale z dokumentacji może wystąpić potencjalny problem z ponownym wyświetlaniem się (jak rozumiem). Aby wyświetlić inne zdefiniowane wzorce, syn-contains
sekcja powinna go zawierać.
:help syn-containedin
:help syn-contains
Powielony problem z: Ustaw przedmiot na wyższy priorytet podświetlenia na vimie
/[^\d0-\d127]