2013-11-24 41 views
0

你好,我有vimconfig(test.vim):Vim,如何讓vmap快捷方式運行一次?

set nocompatible 
vmap t :call Hello()<cr> 

fun! Hello() "{{{ 
    echom "I work with selection" 
endfunction "}}} 

我運行的vim與配置,禁用任何其他設置和插件:

vim -u test.vim test.vim 

好吧,當我選擇幾行,然後按「t」,功能你好幾次運行。我想爲按下按鍵時只運行一次的視覺模式製作快捷方式。但是如何?在Vim的幫助

回答

2

取決於你想要什麼,你有兩個選擇:

  1. 使用function Hello() range聲明(注意最後一個字)。這樣,你告訴vim你的函數本身是處理範圍(否則它假定在一行上運行,有效地使vim重複調用一個範圍內的每一行)。這種方式範圍可通過a:firstlinea:lastline獲得,但如果您想獲取列,則仍然必須使用'<'>標記以及col()函數。
  2. 使用<C-u>之後:清除範圍。當您在可視模式下按:時,它將啓動已插入範圍('<,'>)的命令模式。該範圍代表選擇中的第一行和最後一行。通過'<'>標記(使用col(),line()getpos()獲取實際數字),這種方式仍然可以選擇範圍。
1

找到答案:

:help a:firstline 

如果給出[range]參數,功能有望採取一系列自身的護理。 範圍以「a:firstline」和「a:lastline」的形式傳遞。如果[範圍] 被排除,「:{range} call」將調用該範圍內每行 的函數,並且光標位於每行的開始位置。請參閱 | function-range-example |。光標仍然移動到範圍的第一行 ,就像所有Ex命令一樣。

所以功能你好應該像定義:

fun Hello() range 
    echom "I work with selection" 
end