您可以在vi/vim中的逗号(或任意字符)之间进行替换或删除吗?

pn9klfpd  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(190)

例如,我有这样的文本:

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

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

bakd9h0s

bakd9h0s1#

有一些插件可以让你创建自定义文本对象。2如果没有安装插件,假设你的光标在两个逗号之间,你可以:

T,c,

t,c,

要模拟di,ci,,请将上面的c更改为d
相关帮助文档:

:h t
:h T
:h ,
brgchamk

brgchamk2#

有很多插件可以帮助你创建自定义的文本对象,比如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|等所需的所有自定义运算符挂起Map。
添加新的分隔符也很容易。
我的vimrc里有可爱的笑脸。

zzlelutf

zzlelutf3#

如果您在类似的部分中,则可以使用T,ct,
或者你如果你想安装一个插件像vim-argumentative允许你使用ci,di,

qncylg1j

qncylg1j4#

如果你愿意为Vim打补丁的话,不久前有一个建议(包括一个大部分工作的补丁)允许你匹配任意字符。在你的例子中,它是cim,,表示“在匹配的逗号内改变”。请参见https://groups.google.com/d/topic/vim_dev/pZxLAAXxk0M/discussion的讨论和补丁的一些版本。我已经用了很长时间了,我遇到的唯一问题是在可视模式下;但是,我并没有像预期的那样经常使用这个特性。

shyt4zoc

shyt4zoc5#

使用targets.vim

  • da,删除整个句子并留下一个逗号。
  • ci,以更改逗号内的内容。

相关问题