如何在 vim 中删除向后的单词和前导空格?

如何在 vim 中删除向后的单词和前导空格?

我正在尝试重新映射option-backspace在 Mac OS X 的终端应用程序中的 vim 中的行为类似于它在其他 Mac 应用程序中的行为。

它应该执行向后删除单词,同时删除任何前导空格字符。

到目前为止我能找到的最接近的匹配是命令db,但它只会删除到单词的开头;它不会删除任何前导空格。

下面是我想要完成的一些示例(|是光标位置):

test text| here
" After hitting option-backspace:
test| here

test text |here
" After hitting option-backspace:
test| here

high-lighting| text
" After hitting option-backspace:
high-| text

midway throu|gh text
" After hitting option-backspace:
midway|gh text

start |of line
" After hitting option-backspace:
|of line

我最初打算这样做dbdh,但在第三个例子中,这不起作用(连字符不是空格,因此应该保留)。

有什么好方法可以实现这个目的吗?

编辑:在输入更多内容后,我意识到“删除前导空格”行为实际上是不是类似 Mac;在我的 Mac 上,按option-backspace会在第一个非单词字符处停止,就像 Vim 一样。

不过,感谢您加入我这个思想实验(:

答案1

我无法使用 Mac,但我认为这几乎可以满足您的要求,但不完全是您想要的(它没有将光标放在您在示例二中指示的位置):

" Control-backspace works like control-w:
imap <c-backspace> <c-w>

只需将映射更改为使用选项而不是控制。

您可能还想要/需要做:

:set backspace=indent,eol,start

看:

:help i_ctrl-w
:help 'backspace'

答案2

test text| here
" After hitting option-backspace:
test| here

test text |here
" After hitting option-backspace:
test| here

光标应该位于字符上,而不是字符之间。所以我看不出这里有什么区别。d?<Space>不过,似乎可以解决问题。或者dbx,也许。

high-lighting| text
" After hitting option-backspace:
high-| text

db作品。

start |of line
" After hitting option-backspace:
|of line

如果光标在空格上,d^.或者d^x

答案3

我发现了一个几乎可行的方法:

imap ^[^? <esc>bdw<insert>

(当我按下“-”^[^?时终端发送的内容)optionbackspace

这会将光标后退到前一个单词的开头并删除后面的单词(该单词似乎也包括尾随空格)。

正如预期的那样:

test text| here
" After hitting option-backspace:
test| here

但它存在两个问题:

high-lighting| text
" After hitting option-backspace:
high|- text
" Expected:
high-| text

test te|xt here
" After hitting option-backspace:
test| here
" Expected:
"test|xt here"

相关内容