你能用vi / vim中的逗号(或任意字符)替换或删除吗?

时间:2014-09-15 20:18:40

标签: vim

例如,我有这样的文字:

I talked to a friend, I hiked a mountain, I am working with blah blah, 

我想删除或替换I hiked a mountain。为什么ci,di,不起作用?有没有办法在逗号之间抓取,替换或删除?

5 个答案:

答案 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, 在逗号内进行更改。