Vim - 시각적 모드 - 단어 선택 개선

Vim - 시각적 모드 - 단어 선택 개선

신사 숙녀 여러분,

시각적 모드(.vimrc)에서 아래 바로가기를 실행할 때 왜 vim이 다음 동작을 보이는지 이해할 수 없습니다.

vmap <script> <C-LEFT> :call Test()<CR>
function! Test()
     "empty
endfunction

여기에 이미지 설명을 입력하세요

Vim은 바로가기를 실행하는 줄 위의 첫 번째 열로 이동하여 상태 표시줄에 ": '<,'> call Test ()"라는 메시지를 표시합니다. 그러나 이것은 함수를 호출할 때만 발생하며 "$"(* 참조)와 같은 명령을 사용할 때 예상되는 동작입니다.

여기에 이미지 설명을 입력하세요

(*)

vmap <C-LEFT> $

내 목표는 "Ctrl+Left" 조합을 사용할 때 Vim이 "탭"을 단어로 간주하도록 하는 것입니다. 왜냐하면 줄의 첫 번째 문자가 "탭"일 때 Vim은 맨 윗줄의 첫 번째 단어를 선택하기 때문입니다.

여기에 이미지 설명을 입력하세요

이는 원하는 동작입니다.

여기에 이미지 설명을 입력하세요

대체 솔루션이나 해결 방법이 있으면 감사하겠습니다.

감사해요!

답변1

vmapvim이 Visual 또는 Select 모드에 있을 때 적용됩니다 . 지도를 실행할 때 어떤 텍스트가 선택되었는지 말하지 않았습니다.

놀라운 행동은 다음의 결과일 수 있습니다.

:'<,'>

를 사용하여 Visual 모드에서 Ex 모드로 전환할 때 자동으로 제공되는 범위입니다 :. 또한 사용자 정의 함수가 기본적으로 범위를 처리하는 방식도 마찬가지입니다.

즉, 커서는 시각적 선택 항목의 마지막 줄에서 끝날 것으로 예상됩니다. 귀하가 설명하는 동작을 재현할 수 없습니다.

:help :call
:help '<
:help v_:

답변2

이는 :call자동으로 추가된 시각적 범위로 호출되기 때문입니다 '<,'>. :help :call설명합니다:

범위가 지정되고 함수가 범위를 자체적으로 처리하지 않는 경우 범위의 각 줄에 대해 함수가 실행되며 커서는 해당 줄의 첫 번째 열에 있습니다. 커서는 마지막 줄에 남아 있습니다(마지막 함수 호출로 인해 이동되었을 수 있음).

그래서 범위를 지워야합니다.

vmap <script> <C-LEFT> :<C-u>call Test()<CR>

또는 함수가 이를 처리하도록 합니다.

function! Test() range

답변3

나는 다음 접근 방식을 사용하여 이 문제를 "해결"했습니다.

" Note: "Normal" movement with "Ctrl+Right"! By Questor
nmap <silent> <C-Right> e
imap <silent> <C-Right> <C-o>e<Right>
vmap <silent> <C-Right> e

" Note: "Normal" movement with "Ctrl+Left"! By Questor
nmap <silent> <C-Left> b
imap <silent> <C-Left> <C-o>b
vmap <silent> <C-Left> b

그러나 저는 함수를 사용하지 않습니다. 기능이 사용된 경우 Ingo Karkat이 그의 응답에서 설명하는 대로( 를 사용하여) 진행해야 합니다 : <C-u>.

이 간단한 접근 방식으로 위에서 설명한 Vim의 원치 않는 동작을 "수정"합니다.

사용 예 보기https://github.com/eduardolucioac/groovim/blob/master/.vimrc

[]'에스

관련 정보