我正在尝试重新映射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"