![Vim - 시각적 모드 - 단어 선택 개선](https://rvso.com/image/1399997/Vim%20-%20%EC%8B%9C%EA%B0%81%EC%A0%81%20%EB%AA%A8%EB%93%9C%20-%20%EB%8B%A8%EC%96%B4%20%EC%84%A0%ED%83%9D%20%EA%B0%9C%EC%84%A0.png)
신사 숙녀 여러분,
시각적 모드(.vimrc)에서 아래 바로가기를 실행할 때 왜 vim이 다음 동작을 보이는지 이해할 수 없습니다.
vmap <script> <C-LEFT> :call Test()<CR>
function! Test()
"empty
endfunction
Vim은 바로가기를 실행하는 줄 위의 첫 번째 열로 이동하여 상태 표시줄에 ": '<,'> call Test ()"라는 메시지를 표시합니다. 그러나 이것은 함수를 호출할 때만 발생하며 "$"(* 참조)와 같은 명령을 사용할 때 예상되는 동작입니다.
(*)
vmap <C-LEFT> $
내 목표는 "Ctrl+Left" 조합을 사용할 때 Vim이 "탭"을 단어로 간주하도록 하는 것입니다. 왜냐하면 줄의 첫 번째 문자가 "탭"일 때 Vim은 맨 윗줄의 첫 번째 단어를 선택하기 때문입니다.
이는 원하는 동작입니다.
대체 솔루션이나 해결 방법이 있으면 감사하겠습니다.
감사해요!
답변1
vmap
vim이 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
[]'에스