4
例如丟棄計,我有以下表達式映射: <expr>中映射
function! DelNthSpace() let col=match(getline('.'), '[[:blank:] ]', col('.'), v:count1) return virtcol([line('.'), col+1])."|s \e" endfunction nnoremap s DelNthSpace()你看,
v:count1
已經在這裏處理。但是,如果我試圖取代與位於,例如這樣的功能,在虛擬列
35
第二空間(如果你放在return語句光標將是),那麼這種嘗試去
235
列,取代它,因爲這會從
2s
轉換爲
2{DelNthSpace()}
→
235|s ^[
。現在我預先在返回語句的開始處預留了無用的
|
,這會消耗不需要的計數,但我不喜歡這種解決方案,因爲它使用兩個移動而不是一個移動。
更新:我應該提供更多的上下文:
function! ToNthSpace()
let col=match(getline('.'), '[[:blank:] ]', col('.'), v:count1)
return virtcol([line('.'), col+1])."|"
endfunction
noremap <expr> s ToNthSpace()
有功能的一堆正在使用這些,一個模仿取代命令,但音譯其參數(所以,一邊撥打r$ii
將取代與$
和字符插入i
,\tr$ii
將∬
替換字符,t
和\tt
和一些其他國家之間同樣的關係),其它的是運動。由於這些函數定義了運動,所以我不能使用:<C-u>
,它會離開視覺模式(或者我將不得不添加一個黑客,它會告訴哪個模式函數被調用)。我不知道這個黑客,我無法爲正常和可視模式定義不同的映射。
我upvoting因爲標題問什麼,我需要我自己,但很難通過文字來獲得,我也不清楚,如果給人一種非常特殊的應用程序的所有細節是必要的。 – Alexey 2015-03-03 12:59:53
我有一個相關的問題:例如,如果您已在Vim中以可視模式輸入一個計數,但後來認爲計數錯誤或不必要,那麼如何在不離開Visual模式的情況下取消計數? – Alexey 2015-03-03 13:02:10