如何删除或猛拉斜线和星号?

时间:2017-05-22 08:52:32

标签: vim

我使用di"代表di{代表括号,dit代表HTML代码。

我经常使用CSS。我想删除内部斜杠或星号。例如:

/* This is a comment. Delete or yank me. ;) */
.button {
  content: 'Change my comment.';
}

我不想用功能等来完成它。我如何用所有变体映射这些关键字? (特别需要delete insideyank insidedelete arounddelete and go insert mode (ci/))赞:

di/
yi/
ci/
ya/
da/
di*
ya*

等...

2 个答案:

答案 0 :(得分:12)

您可以通过组合可视模式映射和运算符挂起模式映射来定义自己的文本对象。

此代码段将创建一个i/文字对象:

xnoremap i/ :<C-u>normal! T/vt/<CR>
onoremap i/ :normal vi/<CR>

您可以像内置的那样使用:ci/vi/di/yi/

这个将创建一个a/文本对象:

xnoremap a/ :<C-u>normal! F/vf/<CR>
onoremap a/ :normal va/<CR>

您可以像内置的那样使用:ca/va/da/ya/

BONUS:这是我vimrc的一个易于展开的代码段,其中包含 26 个新文本对象,包括您想要的文本对象:

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

答案 1 :(得分:4)

还有一个优秀的targets.vim插件,其中包括那些文本对象以及大量其他文本对象。值得一试,特别是如果你不想定义自己的。