Jawaban:
Menggunakan rentang dalam []
kelas karakter dalam pencarian Anda, Anda harus dapat mengecualikan rentang karakter heksadesimal ASCII, oleh karena itu menyorot (dengan asumsi Anda telah hlsearch
mengaktifkan) semua karakter lain yang berada di luar rentang ASCII:
/[^\x00-\x7F]
Ini akan melakukan kecocokan negatif (via [^]
) untuk karakter antara ASCII 0x00
dan ASCII 0x7F
(0-127), dan tampaknya berfungsi dalam tes sederhana saya. Untuk ASCII yang diperluas, tentu saja, rentangkan rentang hingga \xFF
alih-alih \x7F
menggunakan /[^\x00-\xFF]
.
Anda juga dapat mengekspresikannya dalam desimal melalui \d
:
/[^\d0-\d127]
Jika Anda membutuhkan sesuatu yang lebih spesifik, seperti pengecualian karakter yang tidak dapat dicetak, Anda perlu menambahkan rentang tersebut ke dalam kelas karakter []
.
Ya, ada fitur asli untuk melakukan penyorotan untuk string yang cocok. Di dalam Vim, lakukan:
:help highlight
:help syn-match
syn-match
mendefinisikan string yang cocok masuk dalam grup.
highlight
mendefinisikan warna yang digunakan oleh grup. Pikirkan saja tentang penyorotan sintaks untuk file vimrc Anda.
Jadi Anda dapat menggunakan perintah di bawah ini dalam file .vimrc Anda:
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2
:
di depan di vimrc Anda.
termbg
sepertinya tidak menjadi perintah hukum dalam VIM 7.3 sebagaimana diinstal pada Ubuntu Server 12.10.
termbg
tampaknya tidak menjadi parameter hukum dalam VIM 7.3 yang diinstal pada Ubuntu Server 12.10.
term
tidak dapat memiliki warna latar belakang, sedangkan terminal warna cterm
dapat.
Untuk orang lain (mulai sekarang yang kurang beruntung) yang berakhir di sini melalui mesin pencari dan tidak dapat melakukan penyorotan karakter non-ASCII, coba ini (masukkan ini ke dalam .vimrc Anda):
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
Ini memiliki manfaat tambahan karena tidak bertabrakan dengan definisi sintaksis biasa (tipe file [ekstensi file]).
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
ke akhir baris terakhir, membuatnya au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL
. Saya menemukan gangguan layak (ketika unicode diperbolehkan), jawaban asli di sini tidak menangkap hal-hal seperti kode non-ascii di dalam if
pernyataan ...
autocmd BufRead ....
dalam autogroup di vim, kecuali Anda memiliki alasan yang sangat baik untuk tidak ...
Regex ini juga berfungsi. Itu adalah hit google pertama untuk "vim remove non-ascii karakter" dari briceolion.com dan dengan :set hlsearch
akan menyorot:
/[^[:alnum:][:punct:][:space:]]/
:%s/[^[:alnum:][:punct:][:space:]]//gc
yang paling utama, lalu diganti.
Jika Anda tertarik juga pada karakter yang tidak dapat dicetak, gunakan yang ini:/[^\x00-\xff]/
Saya menggunakannya dalam suatu fungsi:
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
ke fenc
. Saya mengubah penyandian karena penyandian default saya adalah (pada tahun 2013) latin1. Fungsi tidak menyoroti karakter yang tidak dapat dicetak jika set karakter latin1. Juga lihat sorotan Anda harus memiliki kunci ERROR
dalam file sintaks warna Anda. Ini milik saya:hi Error guifg=Black guibg=Orange
Berdasarkan jawaban lain pada topik ini dan jawaban yang saya dapatkan di sini saya telah menambahkan ini ke saya .vimrc
, sehingga saya dapat mengontrol penyorotan non-ascii dengan mengetik <C-w>1
. Itu juga menunjukkan komentar di dalam, meskipun Anda perlu menambahkan grup komentar untuk setiap sintaks file yang akan Anda gunakan. Artinya, jika Anda akan mengedit file zsh, Anda harus menambahkannya zshComment
ke baris
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
jika tidak, ia tidak akan menampilkan karakter non-ascii (Anda juga dapat mengatur containin = ALL jika Anda ingin memastikan untuk menampilkan karakter non-ascii di semua grup). Untuk memeriksa bagaimana komentar dipanggil pada jenis file yang berbeda, buka file dari jenis yang diinginkan dan masukkan :sy
pada vim, kemudian cari pada item sintaks untuk komentar.
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>
Entah bagaimana, tidak ada jawaban di atas yang berfungsi untuk saya.
Jadi saya menggunakan :1,$ s/[^0-9a-zA-Z,-_\.]//g
Itu membuat sebagian besar karakter saya tertarik.
Seseorang sudah menjawab pertanyaan itu. Namun, untuk orang lain yang masih mengalami masalah, berikut ini adalah solusi lain untuk menyoroti karakter non-ascii dalam komentar (atau grup sintaksis apa pun dalam masalah ini). Ini bukan yang terbaik, tapi ini perbaikan sementara.
Seseorang dapat mencoba:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
Ini memiliki bagian campuran dari solusi lain. Anda dapat menghapus contained
, tetapi, dari dokumentasi, mungkin ada potensi masalah berulang itu sendiri (seperti yang saya mengerti). Untuk melihat pola yang didefinisikan lainnya, syn-contains
bagian akan memuatnya.
:help syn-containedin
:help syn-contains
Masalah yang direplikasi dari: Atur item ke prioritas sorotan yang lebih tinggi pada vim
/[^\d0-\d127]