2011-08-31 2 views
1

공백을 강조 표시하는 작은 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
  • 를 설정한다 (그리고 그것을하지 않을) 검색이
  • 당신은 커서를 이동하지 않으려면이

답변

2

를 변경 한 경우 원래 줄로 돌아가 공백 찾아 실행

let @/ = '\s\+$' 

NB : : 함수가 커서를 이동해야, 단지 즉, 정확한 검색 패턴에 @/을 설정합니다.

+0

커서에 관한 것이 아니라 동작에 관한 것입니다. 왜 다른가? 원하는 결과를 얻으려면 어떻게해야합니까? (함수에서 공백을 강조 표시) – alfredodeza

+1

highlightsearch ->'@ /'에서 사용하는 변수를 직접 설정합니다.잘못된 행동에 대한 설명은': h function-search-undo'를 참조하십시오. –

+0

시도해 보았지만 아무 것도 강조 표시하지 않았습니다. – alfredodeza

관련 문제