Vim - 視覺模式 - 改進單字選擇

Vim - 視覺模式 - 改進單字選擇

先生/女士們,

我不明白為什麼當我在視覺模式(.vimrc)上觸發下面的快捷方式時,vim 表現出以下行為:

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

在此輸入影像描述

Vim 前往 I 觸發捷徑的行上方的第一列,並在狀態列中顯示以下「: '<,'> call Test ()」。但這僅在我調用函數時發生,當我使用“$”(參見 *)之類的命令時,行為是預期的。

在此輸入影像描述

(*)

vmap <C-LEFT> $

我的目標是當我使用“Ctrl+Left”組合時,讓Vim 將“tab”視為一個單詞,因為當該行的第一個字元是“tab”時,Vim 選擇頂行中的第一個單字。

在此輸入影像描述

這是期望的行為:

在此輸入影像描述

如果您有任何替代解決方案或解決方法,我也將不勝感激。

謝謝!

答案1

vmap當 vim 處於可視或選擇模式時適用。您沒有說明觸發地圖時選擇了什麼文字。

令人驚訝的行為可能是由於

:'<,'>

當您使用從 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

[]的

相關內容