你是否可以在vi/vim中用逗号或任何特定字符进行替换或删除操作?

8
例如,我有这样的文本:

例如,我有这样的文本:

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

我想删除或替换I hiked a mountain。为什么ci,di,不能起作用?是否有一种方法可以在逗号之间抓取、替换或删除内容?

5个回答

13

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

T,c,

或者

t,c,

为了模拟您的ci,用d替换上面的c即可实现di

相关帮助文档:

:h t
:h T
:h ,

3
当我看到这个时,我想:“它不应该是T,ct,吗?”花了我一点时间才意识到这是重复搜索中的, - Caek

8

有许多插件可以帮助您创建自定义文本对象,例如 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 中有可爱的表情符号。

3
如果你处于这样的一个区域,你可以使用T,ct,
或者,如果你想安装像vim-argumentative这样的插件,它允许你使用ci,di,

1
如果你愿意为此功能打补丁,曾经有一份提案(包括一个基本可用的补丁)允许你匹配任意字符。在你的例子中,可以使用cim,表示“更改匹配逗号内部”。请参见https://groups.google.com/d/topic/vim_dev/pZxLAAXxk0M/discussion以获取讨论和几个版本的补丁。我已经使用它很长时间了,唯一遇到的问题是在可视模式下;但话说回来,我没有像预期的那样经常使用这个功能。

0

使用 targets.vim:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接