Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 添加对“ci”和“da”的支持(选择管道内的文本)_Vim - Fatal编程技术网

Vim 添加对“ci”和“da”的支持(选择管道内的文本)

Vim 添加对“ci”和“da”的支持(选择管道内的文本),vim,Vim,在编辑源代码时,我经常使用诸如ci(和di{之类的命令 Ruby块中的参数包含在管道字符中,如| a、b | 是否可以扩展此行为以添加对的支持,从而使ci、da和yi等命令正常工作?我的vimrc中有以下命令(为了完整性,我添加了va和vi命令): ,操作符重复前面的F,F,T或T,但方向相反。这是一个非常有用的键 可以轻松修改这些映射以支持其他分隔符;在编辑LaTeX时,我一直使用$版本。这就是我将使用的: vnoremap <silent> a<bar> :<c

在编辑源代码时,我经常使用诸如
ci(
di{
之类的命令

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


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

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

操作符重复前面的
F
F
T
T
,但方向相反。这是一个非常有用的键


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

这就是我将使用的:

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>
vnoremap a:静默!正常!vFof
静默!正常!vTot
onoremap a:正常va
onoremap i:正常vi
基本上设置操作员挂起模式(即onoremap)这将调用相应的视觉模式映射。视觉模式映射将使用
F
向后搜索以找到
,然后通过
o
命令转到视觉选择的另一侧,然后使用
F
向前搜索以选择管道区域的另一端。内部映射与t而不是使用
F
F
命令,您可以使用
t
t


遗憾的是,这些映射不能正确地与
,redo命令一起工作,因为它们固有地依赖于视觉模式映射,这意味着
命令将再次执行相同的命令,但只对占用相同空间的区域执行。

我正在考虑编写自己的文本obj。但是这要快得多。@Thanh DK:Your-link可能比我的方法更严格。例如,我的映射无法处理嵌套分隔符。但它们足以满足我的需要。
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>