在编辑源代码时,我经常使用ci(
和di{
等命令。
Ruby块中的参数包含在管道字符内,如|a, b|
是否可以扩展此行为以添加对|
的支持,以便ci|
,da|
和yi|
等命令正常工作?
答案 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,
,
运算符会重复上一个F
,f
,T
或t
,但方向相反。一个非常有用的钥匙!
可以轻松修改这些映射以支持其他分隔符;编辑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|
向前搜索选择管道区域的另一端。内部映射相同,但您使用F
和f
命令而不是T
和t
命令。
遗憾的是,这些映射与.
,redo命令无法正常工作,因为它们本质上依赖于可视模式映射,这意味着.
命令将再次执行相同的命令,但仅适用于占用的区域相同的空间。