Yanıtlar:
[]
Aramanızdaki bir karakter sınıfındaki aralığı kullanarak , ASCII onaltılık karakter aralığını hariç tutabilmeniz gerekir, bu nedenle ASCII aralığının dışında kalan hlsearch
diğer tüm karakterleri vurgulayın ( etkinleştirdiğiniz varsayılarak ) :
/[^\x00-\x7F]
Bu, ASCII ve ASCII (0-127) arasındaki karakterler için negatif bir eşleşme (üzerinden [^]
) yapar 0x00
ve 0x7F
basit testimde çalışıyor gibi görünüyor. Genişletilmiş ASCII için, kuşkusuz aralığı kullanmak \xFF
yerine menzili \x7F
arttırın /[^\x00-\xFF]
.
Ondalık olarak da şu şekilde ifade edebilirsiniz \d
:
/[^\d0-\d127]
Yazdırılamayan karakterlerin hariç tutulması gibi daha spesifik bir şeye ihtiyacınız varsa, bu aralıkları karakter sınıfına eklemeniz gerekir []
.
Evet, eşleşen dizeler için vurgulama yapmak için yerel bir özellik vardır. Vim içinde şunları yapın:
:help highlight
:help syn-match
syn-match
bir gruba düşme ile eşleşen bir dize tanımlar.
highlight
grup tarafından kullanılan rengi tanımlar. Vimrc dosyalarınız için sözdizimi vurgulamayı düşünün.
Böylece .vimrc dosyanızda aşağıdaki komutları kullanabilirsiniz:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
:
vimrc'nize komutların önüne koymanız gerekmez .
termbg
Ubuntu Server 12.10 üzerine yüklendiği gibi VIM 7.3'te yasal bir komut gibi görünmüyor.
termbg
Ubuntu Server 12.10 üzerine kurulu gibi VIM 7.3 yasal bir parametre gibi görünmüyor.
term
arka plan rengine sahip olamazken, renkli terminal cterm
olabilir.
Buraya bir arama motoru aracılığıyla biten ve ASCII olmayan karakterlerin vurgulanmasını başaramayan diğer (bundan sonra daha az şanssız olan) insanlar için bunu deneyin (bunu .vimrc'nize koyun):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Bunun, düzenli (filetype [dosya uzantısı] tabanlı) sözdizimi tanımlarıyla çarpışmama avantajı vardır.
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 nane 17.3
containedin=ALL
yapma, son satırın sonuna kadar au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL
. Ben (Unicode izin verilir) oyalama değerinde o, orijinal cevabı burada yok bulmak değil böyle bir olmayan ASCII kodu içi gibi şeyler yakalamak if
... deyimi
autocmd BufRead ....
Bu normal ifade de işe yarıyor. Bu briceolion.com "vim ascii olmayan karakterler kaldırmak" için ilk google hit oldu ve :set hlsearch
vurgulayacaktır:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gc
vurgulanan, sonra değiştirilen oldu.
Yazdırılamayan karakterlerle de ilgileniyorsanız, bunu kullanın:/[^\x00-\xff]/
Bir işlevde kullanın:
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
için fenc
. Varsayılan kodlamam (2013'te) latin1 olduğundan kodlamayı değiştirdim. Karakter kümesi latin1 ise işlev yazdırılamayan karakterleri vurgulamaz. Vurgulamayı görmek için anahtarın ERROR
renk sözdizimi dosyanızda olması gerekir . Bu benim:hi Error guifg=Black guibg=Orange
Bu konudaki diğer cevaplara ve burada aldığım cevaba dayanarak bunu benim ekledim .vimrc
, böylece ascii olmayan vurgulamayı yazarak kontrol edebilirim <C-w>1
. Kullanacağınız her bir dosya sözdizimi için yorum grubunu eklemeniz gerekse de, iç açıklamaları da gösterir. Yani, bir zsh dosyasını düzenleyecekseniz zshComment
, satıra eklemeniz gerekir
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
Aksi takdirde ascii olmayan karakteri göstermez (tüm gruplarda ascii olmayan karakterleri gösterdiğinizden emin olmak istiyorsanız içerenin = ALL değerini de ayarlayabilirsiniz). Yorumun farklı bir dosya türünde nasıl çağrıldığını kontrol etmek için, istediğiniz türde bir dosya açın ve :sy
vim'e girin , ardından sözdizimi öğelerinde yorum arayın.
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>
Bir şekilde yukarıdaki cevapların hiçbiri işe yaramadı.
Ben de kullandım :1,$ s/[^0-9a-zA-Z,-_\.]//g
İlgilendiğim karakterlerin çoğunu tutar.
Birisi soruyu zaten yanıtladı. Bununla birlikte, hala sorun yaşayan diğerleri için, yorumlarda ascii olmayan karakterleri (veya konuyla ilgili herhangi bir sözdizimi grubunu) vurgulamak için başka bir çözüm. En iyisi değil, ama geçici bir düzeltme.
Biri deneyebilir:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
Bu, diğer çözümlerden karışık parçalar içerir. Sen kaldırabilir contained
(Anlıyorum gibi) belgelerinden, kendisini recursing potansiyel sorun olabilir, ancak. Diğer tanımlı kalıpları görüntülemek için, syn-contains
bölüm onu içerir.
:help syn-containedin
:help syn-contains
Çoğaltılan sorun: Vim'de öğeyi daha yüksek vurgu önceliğine ayarla
/[^\d0-\d127]