정상 모드에서 현재 커서 아래에있는 코드 블록을 강조 표시하는 방법을 찾고 있습니다.언더 커서 코드 블록을 강조 표시 하시겠습니까?
이것은 set showmatch
구성 옵션과 비슷하지만 감지 및 강조 표시가 전체 블록에 걸쳐 확장됩니다.
구성 옵션 또는 (선호하는 기존의) 스크립트로이 기능을 수행하는 방법은 무엇입니까?
정상 모드에서 현재 커서 아래에있는 코드 블록을 강조 표시하는 방법을 찾고 있습니다.언더 커서 코드 블록을 강조 표시 하시겠습니까?
이것은 set showmatch
구성 옵션과 비슷하지만 감지 및 강조 표시가 전체 블록에 걸쳐 확장됩니다.
구성 옵션 또는 (선호하는 기존의) 스크립트로이 기능을 수행하는 방법은 무엇입니까?
짧은 대답 : 아니오.
긴 대답 :이를 달성 할 수있는 방법이 있지만, 다른 많은 중요한 강조 표시 기능을 희생해야합니다.
간단한 옵션으로는 할 수 없습니다. 문제는 Vim이 중첩 영역을 허용하지 않는다는 것입니다. 따라서 rainbow.vim이 설치되어 있거나 블록 영역에 영역을 만들면 그 부분이 손실됩니다. 배경색을 설정하는 그룹과 전경을 설정하는 그룹을 강조 표시하는 것은 어려운 일입니다. 당신이 보시 듯이 이것은 매우 제한적입니다.
그러나 공상 놀이를하는 경우 계속 읽으십시오. 여기 난 당신이 날 같은 코딩 스타일에서 C 코드를 사용하고 있지만, 쉽게 변경 될 수 있음을 여기에 가정을 만들고 있어요
...
관련된 무슨을 보여 도움이 간단한 함수입니다 :function! HighlightBlock()
" Search backwards and forwards for an opening and closing brace
" at the start of the line (change this according to your coding
" style or how you define a block).
let startmatch = search('^{', 'bcnW')
let endmatch = search('^}', 'cnW')
" Search in the other direction for each to catch the situation
" where we're in between blocks.
let checkstart = search('^{', 'cnW')
let checkend = search('^}', 'bcnW')
" Clear BlockRegion if it exists already (requires Vim 7 probably)
try
syn clear BlockRegion
catch
endtry
" If we're not in a block, give up
if ((startmatch < checkstart) && (endmatch > checkstart))
\ || ((startmatch < checkend) && (endmatch > checkend))
\ || (startmatch == 0)
\ || (endmatch == 0)
return
endif
" Create a new syntax region called "BlockRegion" that starts
" on the specific lines found above (see :help \%l for more
" information).
exec 'syn region BlockRegion'
\ 'start=' . '"\%' . startmatch . 'l"'
\ 'end=' . '"\%' . (endmatch+1) . 'l"'
" Add "contains=ALL" onto the end for a different way of
" highlighting, but it's not much better...
" Define the colours - not an ideal place to do this,
" but good for an example
if &background == 'light'
hi default BlockRegion guibg='#AAAAAA'
else
hi default BlockRegion guibg='#333333'
endif
endfunction
기능을 사용하려면 어딘가에서 소스를 가져온 다음 변경 사항이있을 때마다이를 호출하는 autocmd를 만듭니다.
au CursorMoved *.c call HighlightBlock()
는 당신이 고려할 수있는 몇 가지 autocommands에 대해 다음을 참조하십시오 :
:help CursorHold
:help CursorHoldI
:help CursorMoved
:help CursorMovedI
좋은 작성자를, 난 당신의 코드가 내 스타일 (JS 일)와 함께 꽤 작업을 수행하는 경우에도 아이디어를 얻을. – julien
아하 : 질문에서 그걸 해결할 수 없었습니다. 나는 js가 중괄호를 사용한다고 믿는다. 그래서 만약 당신이 내부에있을 때 내부 블록 만 강조한다면, 아마도 네 개의 검색 라인에서'^'와'$' 학문, 그러나 강조한 문제 (주어진 말장난)를 감안할 때. – DrAl
아주 좋은 결과입니다. vim의'vaB' (C) 또는'vab' (lispers) 선택을 활용할 수 있을지 궁금합니다. – progo