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