添加对`ci |`和`da |`的支持(在管道内选择文本)

时间:2011-07-05 21:09:22

标签: vim

在编辑源代码时,我经常使用ci(di{等命令。

Ruby块中的参数包含在管道字符内,如|a, b|

是否可以扩展此行为以添加对|的支持,以便ci|da|yi|等命令正常工作?

2 个答案:

答案 0 :(得分:20)

我的vimrc中有以下内容(为了完整性,我添加了va|vi|命令):

nnoremap di\| T\|d,
nnoremap da\| F\|d,
nnoremap ci\| T\|c,
nnoremap ca\| F\|c,
nnoremap yi\| T\|y,
nnoremap ya\| F\|y,
nnoremap vi\| T\|v,
nnoremap va\| F\|v,

,运算符会重复上一个FfTt,但方向相反。一个非常有用的钥匙!

可以轻松修改这些映射以支持其他分隔符;编辑LaTeX时,我一直使用$版本。

答案 1 :(得分:3)

这就是我要用的:

vnoremap <silent> a<bar> :<c-u>silent! normal! vF<bar>of<bar><cr>
vnoremap <silent> i<bar> :<c-u>silent! normal! vT<bar>ot<bar><cr>
onoremap <silent> a<bar> :normal va<bar><cr>
onoremap <silent> i<bar> :normal vi<bar><cr>

基本上设置一个操作员挂起模式(即onoremap),它将调用适当的可视模式映射。视觉模式映射将向后搜索以找到| F|,然后通过o命令转到视觉选择的另一侧,然后使用f|向前搜索选择管道区域的另一端。内部映射相同,但您使用Ff命令而不是Tt命令。

遗憾的是,这些映射与.,redo命令无法正常工作,因为它们本质上依赖于可视模式映射,这意味着.命令将再次执行相同的命令,但仅适用于占用的区域相同的空间。