ฉันพยายามรับ Vim เพื่อเน้นอักขระที่ไม่ใช่ ASCII มีการตั้งค่ารูปแบบการค้นหา regex หรือปลั๊กอินที่ใช้ได้หรือไม่
ฉันพยายามรับ Vim เพื่อเน้นอักขระที่ไม่ใช่ ASCII มีการตั้งค่ารูปแบบการค้นหา regex หรือปลั๊กอินที่ใช้ได้หรือไม่
คำตอบ:
การใช้ช่วงใน[]
คลาสอักขระในการค้นหาของคุณคุณควรจะสามารถยกเว้นช่วงอักขระเลขฐานสิบหก ASCII ดังนั้นการเน้น (สมมติว่าคุณhlsearch
เปิดใช้งาน) อักขระอื่นทั้งหมดที่อยู่นอกช่วง ASCII:
/[^\x00-\x7F]
สิ่งนี้จะทำการจับคู่เชิงลบ (ผ่าน[^]
) สำหรับตัวละครระหว่าง ASCII 0x00
และ ASCII 0x7F
(0-127) และดูเหมือนจะทำงานในการทดสอบอย่างง่ายของฉัน สำหรับการขยาย ASCII ของหลักสูตรขยายช่วงขึ้นไป\xFF
แทนการใช้\x7F
/[^\x00-\xFF]
คุณสามารถแสดงเป็นทศนิยมผ่านทาง\d
:
/[^\d0-\d127]
[]
ถ้าคุณต้องการบางสิ่งบางอย่างที่เฉพาะเจาะจงมากขึ้นเช่นการยกเว้นของตัวละครที่ไม่สามารถพิมพ์คุณจะต้องเพิ่มช่วงที่เป็นตัวอักษรชั้นเรียน
ใช่มีฟีเจอร์เนทีฟที่จะทำการเน้นสำหรับสตริงที่ตรงกัน ภายในเป็นกลุ่มให้ทำ:
: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 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
ผมพบว่ามูลค่าความฟุ้งซ่านมัน (เมื่อ Unicode ที่ได้รับอนุญาต) คำตอบที่เดิมนี่ไม่ได้จับสิ่งต่างๆเช่นไม่ใช่ ASCII ภายในรหัสของif
คำสั่ง ...
autocmd BufRead ....
ไว้ในกลุ่มออโต้ในกลุ่มเว้นแต่คุณจะมีเหตุผลที่ดีมากที่จะไม่ ...
regex นี้ทำงานเช่นกัน มันเป็น google hit ครั้งแรกสำหรับ "vim remove อักขระที่ไม่ใช่ 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 ฟังก์ชันไม่เน้นอักขระที่ไม่สามารถพิมพ์ได้หากชุดอักขระคือ latin1 ดูไฮไลต์ที่คุณต้องมีกุญแจERROR
ในไฟล์ไวยากรณ์สีของคุณ นี้เป็นของฉัน:hi Error guifg=Black guibg=Orange
ขึ้นอยู่กับคำตอบอื่น ๆ ในหัวข้อนี้และคำตอบที่ผมได้ที่นี่ฉันได้เพิ่มนี้เพื่อฉัน.vimrc
เพื่อที่ฉันสามารถควบคุมไม่ใช่ ASCII <C-w>1
ไฮไลต์ด้วยการพิมพ์ นอกจากนี้ยังแสดงความคิดเห็นภายในแม้ว่าคุณจะต้องเพิ่มกลุ่มความคิดเห็นสำหรับแต่ละไวยากรณ์ไฟล์ที่คุณจะใช้ นั่นคือถ้าคุณจะแก้ไขไฟล์ zsh คุณจะต้องเพิ่มzshComment
ลงในบรรทัด
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
มิฉะนั้นจะไม่แสดงตัวอักษรที่ไม่ใช่ ASCII (คุณยังสามารถตั้งค่า containin = ALL ได้หากคุณต้องการให้แสดงอักขระที่ไม่ใช่ ASCII ในทุกกลุ่ม) หากต้องการตรวจสอบว่ามีการเรียกความคิดเห็นในประเภทไฟล์อื่นอย่างไรให้เปิดไฟล์ประเภทที่ต้องการและป้อน:sy
เป็นกลุ่มจากนั้นค้นหารายการไวยากรณ์สำหรับความคิดเห็น
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
มันทำให้ตัวละครส่วนใหญ่ที่ฉันสนใจ
มีคนตอบคำถามแล้ว อย่างไรก็ตามสำหรับผู้อื่นที่ยังคงมีปัญหาอยู่นี่เป็นอีกวิธีการหนึ่งในการเน้นอักขระที่ไม่ใช่ ASCII ในความคิดเห็น (หรือกลุ่มไวยากรณ์ใด ๆ ในเรื่อง) มันไม่ได้ดีที่สุด แต่เป็นการแก้ไขชั่วคราว
อาจลอง:
:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
\ highlight nonascii ctermfg=yellow guifg=yellow
สิ่งนี้มีการผสมผสานบางส่วนจากโซลูชันอื่น ๆ คุณอาจลบcontained
แต่จากเอกสารอาจมีปัญหาที่อาจเกิดขึ้นจากการเรียกซ้ำตัวเอง (ตามที่ฉันเข้าใจ) หากต้องการดูรูปแบบที่กำหนดอื่น ๆ syn-contains
ส่วนจะมี
:help syn-containedin
:help syn-contains
ปัญหาที่ซ้ำกันจาก: ตั้งค่ารายการเป็นลำดับความสำคัญที่เน้นมากขึ้นในกลุ่ม
/[^\d0-\d127]