[regex] Vim이 ASCII가 아닌 문자를 강조 표시하는 방법?
Vim이 ASCII가 아닌 문자를 강조 표시하도록하려고합니다. 사용 가능한 설정, 정규식 검색 패턴 또는 플러그인이 있습니까?
답변
[]
검색에서 문자 클래스의 범위를 사용 하면 ASCII 16 진 문자 범위 를 제외 할 수 있어야 하므로 ASCII 범위 밖에 있는 hlsearch
다른 모든 문자를 강조 표시 ( 활성화 한 것으로 가정 )해야 합니다.
/[^\x00-\x7F]
이것은 ASCII 와 ASCII (0-127) 사이의 문자에 대해 (-를 통해 ) 음의 일치 를 수행하며 간단한 테스트에서 작동하는 것으로 보입니다. 물론 확장 ASCII의 경우을 사용 하는 대신 범위를 확장하십시오 .[^]
0x00
0x7F
\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
답변
검색 엔진을 통해 여기에 끝나고 비 ASCII 문자를 강조 표시 할 수없는 다른 (지금부터 불행하지 않은) 사람들을 위해 이것을 시도하십시오 (이것을 .vimrc에 넣으십시오).
highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"
이는 일반적인 (파일 형식 [파일 확장자] 기반) 구문 정의와 충돌하지 않는 이점이 있습니다.
답변
이 정규식도 작동합니다. 그것은 briceolion.com 에서 “비 ASCII 문자를 제거하는 Vim 제거”에 대한 Google의 첫 번째 히트 였으며 다음 과 같이 :set hlsearch
강조 표시됩니다.
/[^[:alnum:][:punct:][:space:]]/
답변
인쇄 할 수 없는 문자 에 관심이있는 경우 다음을 사용하십시오./[^\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
답변
이 주제에 대한 다른 답변과 여기에 얻은 답변을 기반으로 이것을 내에 추가 .vimrc
했으므로을 입력하여 비 ASCII 강조 표시를 제어 할 수 있습니다 <C-w>1
. 사용할 각 파일 구문에 대해 주석 그룹을 추가해야하지만 내부 주석도 표시됩니다. 즉, zsh 파일을 편집 zshComment
하려면 줄 에 추가 해야합니다.
au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment
그렇지 않으면 ASCII가 아닌 문자가 표시되지 않습니다 (모든 그룹에 ASCII가 아닌 문자를 표시하려면 containsin = ALL을 설정할 수도 있음). 다른 파일 유형에서 주석이 호출되는 방식을 확인하려면 원하는 유형의 파일을 열고 :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
내가 관심있는 캐릭터의 대부분을 유지합니다.