Jak sprawić, by Vim podświetlił znaki inne niż ascii?
Próbuję nakłonić Vima do podświetlania znaków innych niż ASCII. Czy istnieje dostępne ustawienie, wzorzec wyszukiwania regex lub wtyczka, aby to zrobić?
8 answers
Używając zakresu w klasie znaków []
podczas wyszukiwania, powinieneś być w stanie wykluczyć szesnastkowy zakres znaków ASCII, dlatego podświetlając (zakładając, że masz włączone hlsearch
) wszystkie inne znaki leżące poza zakres ASCII:
/[^\x00-\x7F]
To zrobi negative match (via [^]
) dla znaków pomiędzy ASCII 0x00
i ASCII 0x7F
(0-127), i wydaje się działać w moim prostym teście. Dla rozszerzonego ASCII, oczywiście rozszerzyć zakres do {[7] } zamiast \x7F
używając /[^\x00-\xFF]
.
Można również wyrazić go w dziesiętnym poprzez \d
:
/[^\d0-\d127]
Jeśli potrzebujesz czegoś bardziej szczegółowego, jak wykluczenie niedrukowalnych znaków, musisz dodać te zakresy do klasy znaków []
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-15 12:53:34
Tak, istnieje funkcja natywna do podświetlania dowolnych dopasowanych ciągów. Inside Vim, do:
:help highlight
:help syn-match
syn-match
definiuje łańcuch, który pasuje do grupy.
highlight
definiuje kolor używany przez grupę.
Wystarczy pomyśleć o podświetlaniu składni dla plików vimrc.
Więc możesz użyć poniższych poleceń w swoim .plik vimrc:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-15 00:25:11
Dla innych (od teraz mniej pechowych) ludzi kończących się tutaj przez wyszukiwarkę i nie może osiągnąć podświetlanie znaków nie-ASCII, spróbuj tego (włóż to do swojego ."vimrc"): {]}
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Ma to dodatkową zaletę, że nie koliduje z definicjami składni zwykłej (opartej na typie pliku [rozszerzenie pliku]).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-06 03:31:32
Jeśli interesują Cię również znaki non printable 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-16 13:04:06
Ten regex działa również. To był pierwszy hit google dla "vim Usuń znaki nie-ascii" z briceolion.com i z :set hlsearch
podświetli:
:/[^[:alnum:][:punct:][:space:]]/g
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-30 16:37:26
Bazując na innych odpowiedziach na ten temat i odpowiedzi, które otrzymałem tutaj dodałem to do mojego .vimrc
, aby móc kontrolować podświetlanie bez ascii, wpisując <C-w>1
. Wyświetla również wewnątrz komentarzy, chociaż będziesz musiał dodać grupę komentarzy dla każdej składni pliku, której użyjesz. Oznacza to, że jeśli edytujesz plik zsh, musisz dodać zshComment
do linii
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
W Przeciwnym Razie nie wyświetli znaku spoza ascii. Aby sprawdzić, jak komentarz jest wywoływany na innym typie pliku, otwórz plik żądanego typu i wprowadź :sy
w Vimie, a następnie wyszukaj w elementach składni komentarz.
function HighlightNonAsciiOff()
echom "Setting non-ascii highlight off"
highlight nonascii none
let g:is_non_ascii_on=0
endfunction
function HighlightNonAsciiOn()
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
echom "Setting non-ascii highlight on"
highlight nonascii cterm=underline ctermfg=red ctermbg=none term=underline
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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:26
Jakoś żadna z powyższych odpowiedzi nie zadziałała na mnie.
Więc użyłem :1,$ s/[^0-9a-zA-Z,-_\.]//g
Zachowuje większość postaci, które mnie interesują.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-27 17:44:18
Ktoś już odpowiedział na pytanie. Jednak dla innych, którzy nadal mają problemy, oto inne rozwiązanie, aby wyróżnić znaki nie-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
To ma mieszankę części z innych rozwiązań. Możesz usunąć contained
, ale z dokumentacji może być potencjalny problem samego rekursowania (jak rozumiem). Aby wyświetlić inne zdefiniowane wzorce, syn-contains
sekcja by go zawierała.
:help syn-containedin
:help syn-contains
Replikowany problem z: Ustaw element na wyższy priorytet podświetlenia w vim
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:24