Відповіді:
Використовуючи діапазон у []
класі символів у вашому пошуку, ви повинні мати можливість виключити шістнадцятковий діапазон символів 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 у всіх групах). Щоб перевірити, як викликається коментар іншого типу файлу, відкрийте файл потрібного типу та введіть :sy
vim, а потім шукайте коментарі у синтаксисі.
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]