Відповіді:
Використовуючи діапазон у []класі символів у вашому пошуку, ви повинні мати можливість виключити шістнадцятковий діапазон символів ASCII, тому виділяючи (якщо ви hlsearchввімкнули) всі інші символи, що лежать поза діапазоном ASCII:
/[^\x00-\x7F]
Це призведе до негативного збігу (через [^]) для символів між ASCII 0x00та ASCII 0x7F(0-127), і, здається, працює в моєму простому тесті. Для розширеного ASCII, звичайно, розширити діапазон до, \xFFа не \x7Fвикористовувати /[^\x00-\xFF].
Ви також можете виразити це у десятковій формі за допомогою \d:
/[^\d0-\d127]
Якщо вам потрібно щось більш конкретне, наприклад, виключення символів, що не друкуються, вам потрібно буде додати ці діапазони до класу символів [].
Так, є основна функція, щоб зробити підсвічування для будь-яких відповідних рядків. Всередині Vim зробіть:
:help highlight
:help syn-match
syn-matchвизначає рядок, що збігається з групою.
highlightвизначає колір, який використовується групою. Подумайте лише про підсвічування синтаксису для файлів vimrc.
Отже, ви можете використовувати команди нижче у файлі .vimrc:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
:перед командами у своєму vimrc.
termbgне здається, що це легальна команда у VIM 7.3, встановлений на Ubuntu Server 12.10.
termbg, здається, не є юридичним параметром у VIM 7.3, встановленому на Ubuntu Server 12.10.
termне може мати колір фону, тоді як кольоровий термінал ctermможе.
Для інших (відтепер менш нещасних) людей, які закінчуються тут за допомогою пошукової системи, і не вдається здійснити виділення символів, що не належать до ASCII, спробуйте це (вставте це у свій .vimrc):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Це має додаткову перевагу в тому, що не стикаються з регулярними (синтаксисними) визначеннями синтаксису (тип файлу [розширення файлу]).
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 17.3
containedin=ALLїх до кінця останнього рядка au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL. Я знаходжу відволікання цінність його (коли юнікод дозволений), оригінальну відповідь тут нічого НЕ зловити такі речі, що не-ASCII код внутрішньої частини ifзаяви ...
autocmd BufRead ....в автогрупу in vim, якщо у вас немає дуже вагомих причин не ...
Цей регекс також працює. Це був перший хіт google для "vim remove non-ascii символів" з briceolion.com і з :set hlsearchпідсвічуванням:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gcяка спочатку висвітлює, а потім замінює.
Якщо вас також цікавлять символи, що не друкуються, використовуйте цей:/[^\x00-\xff]/
Я використовую його у функції:
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на fenc. Я змінив кодування, тому що моє кодування за замовчуванням є (було в 2013 році) latin1. Функція не виділяє символи, що не друкуються, якщо набір символів є латинським1. Занадто бачити підсвічування, ви повинні мати ключ ERRORу вашому файлі синтаксису кольорів. Це моє:hi Error guifg=Black guibg=Orange
Виходячи з інших відповідей на цю тему та відповіді, яку я отримав тут, я додав це до свого .vimrc, щоб я міг керувати виділенням без ассізії, набравши текст <C-w>1. Він також показує внутрішні коментарі, хоча вам потрібно буде додати групу коментарів до кожного використовуваного вами синтаксису файлів. Тобто, якщо ви відредагуєте zsh-файл, вам потрібно буде додати zshCommentдо рядка
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
в іншому випадку він не відображатиме символи, що не містять ascii (ви також можете встановити містити = ALL, якщо ви хочете бути впевненим, щоб показувати символи non-ascii у всіх групах). Щоб перевірити, як викликається коментар іншого типу файлу, відкрийте файл потрібного типу та введіть :syvim, а потім шукайте коментарі у синтаксисі.
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>
Якось жоден із вищезазначених відповідей не працював на мене.
Так я і використовував :1,$ s/[^0-9a-zA-Z,-_\.]//g
Він зберігає більшість персонажів, які мене цікавлять.
Хтось уже відповів на питання. Однак для інших, у яких все ще виникають проблеми, тут є ще одне рішення для виділення символів, які не належать до коментарів (або будь-якої групи синтаксису в питанні). Це не найкраще, але це тимчасове виправлення.
Можна спробувати:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
Це суміш деталей з інших розчинів. Ви можете видалити contained, але, з документації, може виникнути потенційна проблема повторного повторення (наскільки я розумію). Щоб переглянути інші визначені шаблони, syn-containsрозділ міститиме його.
:help syn-containedin
:help syn-contains
Повторне питання з: Встановіть елемент на вищий пріоритет підкреслення на vim
/[^\d0-\d127]