例如,我有这样的文字:
I talked to a friend, I hiked a mountain, I am working with blah blah,
我想删除或替换I hiked a mountain
。为什么ci,
或di,
不起作用?有没有办法在逗号之间抓取,替换或删除?
答案 0 :(得分:9)
有插件可以让您创建自定义文本对象。如果没有安装插件,假设你的光标位于两个逗号之间,你可以这样做:
T,c,
或
t,c,
模拟ci,
di,
c
将上述d
更改为:h t
:h T
:h ,
相关帮助文档:
{{1}}
答案 1 :(得分:6)
有许多插件可以帮助您创建自定义文本对象,例如textobjectify。
我的vimrc
中有以下片段已经有一段时间了,它从未让我失望过:
for char in [ '_', '.', ':', ',', ';', '<bar>', '/', '<bslash>', '*', '+', '%' ]
execute 'xnoremap i' . char . ' :<C-u>normal! T' . char . 'vt' . char . '<CR>'
execute 'onoremap i' . char . ' :normal vi' . char . '<CR>'
execute 'xnoremap a' . char . ' :<C-u>normal! F' . char . 'vf' . char . '<CR>'
execute 'onoremap a' . char . ' :normal va' . char . '<CR>'
endfor
它会创建di,
,vi%
,ci:
,ya|
等所需的所有自定义运营商待处理映射。
添加新的分隔符很容易。
我的vimrc
中有可爱的笑脸。
答案 2 :(得分:2)
如果你在这样的部分,你可以使用T,ct,
。
或者,如果您想要安装vim-argumentative之类的插件,可以使用ci,
和di,
答案 3 :(得分:1)
如果您愿意为这个功能修补Vim,那么有一段时间(包括一个主要有效的补丁)的提案允许您匹配任意字符。在您的示例中,“更改匹配的逗号内容”将为cim,
。有关讨论和补丁的几个版本,请参阅https://groups.google.com/d/topic/vim_dev/pZxLAAXxk0M/discussion。我已经使用了很长时间,我遇到的唯一问题是视觉模式;但话说回来,我并没有像我预期的那样经常使用这个功能。
答案 4 :(得分:0)
在 Neovim 中,我在 ~/.config/nvim/init.vim
中使用以下映射:
" delete sentence delimited by commas
nnoremap d, f,d,
" change inner sentence between commas
nnoremap ci, f,cT,
然后使用
d,
删除完整的句子并留下一个逗号。ci,
在逗号内进行更改。