공백을 강조 표시하는 작은 Vim 함수로 놀고 있습니다.Vim은 다르게 동작하는 함수에서 실행합니다.
그러나 execute
명령은 직접 호출 할 때와 다른 방식으로 작동합니다.
function! ShowWhitespace()
execute "/\\s\\+$"
endfunction
을 그리고는 다음과 같이 매핑됩니다 :
그래서 기능은 다음과 같습니다
:SW
은 단순히 검색하고 공백이 존재하는 위치로 커서를 가져 실행
command! SW call ShowWhitespace()
. 그러나
, 내가 명령 줄에서이 작업을 수행 할 때 :
:exe "/\\s\\+$"
이 올바르게 공백을 강조한다. 또한 highlightsearch
이 항상 켜져 있는지 확인 중이므로 켜기 또는 끄기의 문제는 아닙니다.
부수적으로, 유연성을 위해 아직 추가되지 않은 다른 것들을 갖고 싶기 때문에 (예를 들어 토글 링과 같이)이 기능이 필요합니다.
왜 함수에서 함수를 직접 실행하는 것과 다르게 동작할까요? 저는 Vim에 풍부한 기능을 썼고이 작업을 전혀 다른 방식으로 보지 않았습니다.
편집 & 솔루션 :
는 그래서 빔이 기능은 검색을 변경 가진 좋아하지 않는 것 같다. . 즉시 함수 :help function-search-undo
지적으로 검색 패턴 (클리어 종료로
이 예쁘게하지만 난 처음에 할 찾던 않습니다 수 있습니다
command! -bang Ws let orig_line = line('.') | exe ((<bang>0)?":set hls!":":set hls") | exe '/\s\+$' | exe orig_line
가 조금씩 설명 :
- 매핑합니다 (뱅 받아들이는) 다음과 같은 작업을
Ws
명령 : - 커서가있는 원래의 라인을 저장
- 은 강타 또는 강타에 따라 다릅니다 (예 :
:Ws!
또는:Ws
)가highlightsearch
- 를 설정한다 (그리고 그것을하지 않을) 검색이
- 당신은 커서를 이동하지 않으려면이
커서에 관한 것이 아니라 동작에 관한 것입니다. 왜 다른가? 원하는 결과를 얻으려면 어떻게해야합니까? (함수에서 공백을 강조 표시) – alfredodeza
highlightsearch ->'@ /'에서 사용하는 변수를 직접 설정합니다.잘못된 행동에 대한 설명은': h function-search-undo'를 참조하십시오. –
시도해 보았지만 아무 것도 강조 표시하지 않았습니다. – alfredodeza