获取+在 gnome-terminal 和 vim 插入模式下删除单词

获取+在 gnome-terminal 和 vim 插入模式下删除单词

看起来ctrl+W每次会向后删除一个单词。这很好,但我真的非常希望它能像大多数其他应用程序一样与ctrl+配合使用。backspace

最好的方法是什么?我需要更改以影响 gnome-terminal 命令、命令行 vim 和 GUI vim。

答案1

注意这可以在终端和默认的 emacs 模式下工作(如果Ctrl+W会为您删除前一个单词,则您正在使用该模式)。它不会在 bash 的 vi 模式下工作,也不会影响 vi/vim 本身。因此,这只是部分答案,但这是 emacs 用户可以提供的最好答案。


这类事情由readline库管理,其行为可以通过 进行控制~/.inputrc。编辑(如果不存在,则创建)~/.inputrc并添加此行:

"\C-H":"\C-W"

现在,打开一个新终端,它就应该可以工作了。

解释

\C-H实际上是+ ControlBackSpace您可以按Ctrl+V然后按您要查找的键来查看键码。您将看到BackSpace返回^H

现在它应该可以使用将Control+绑定到删除前一个单词(或)BackSpace的 bash 函数。但是,我无法让它工作。它与不同的键配合得很好(例如,使+删除前一个单词),但出于某种原因,我无法让它与 配合使用。backward-kill-wordunix-word-rubout"\C-H": backward-kill-word"\C-E": backward-kill-wordCtrlEBackSpace

因此,作为一种解决方法,我们只需将Ctrl+映射Backspace到已经映射到 的Ctrl+即可。因此,当您按+时,它将被转换为+ ,进而将发送。我是从以下来源获得此解决方法的想法的Wbackward-kill-wordCtrlBackspaceCtrlWbackward-kill-word这篇 SU 帖子

答案2

改用Alt+ Backspace:它的工作方式与Ctrl+一样Backspace,并且不需要任何配置。

答案3

[ 用于 gnome 终端 ]

使用stty工具,适合直观地显示bash绑定的键盘快捷键。

查看当前的 bash 键盘快捷键(我的系统输出):

stty -a

我的输出:

speed 38400 baud; rows 41; columns 76; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon
-ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0
ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc

werase负责删除整个单词。

运行此项将设置ctrl+backspace在按下时删除一个单词。

stty werase \^H

!注意:这会将此选项设置only为您当前的终端/bash 会话。为了应用此功能,permanently您需要.bashrc在文件末尾添加上一个命令。

每次打开 gnome-terminal 时,都会加载 .bashrc 中的设置。

此后您就可以开始了。尽情享受吧。

[ 适用于 vim 和 neovim ]

只需粘贴此内容init.vimvim.rc

" Map Ctrl-Backspace to delete the previous word in insert mode.
" solution: https://vim.fandom.com/wiki/Map_Ctrl-Backspace_to_delete_previous_word
noremap! <C-BS> <C-w>
noremap! <C-h> <C-w>

当然,这将在插入模式下工作。这就是为插入模式定义它的要点。

适用于neovim 0.5lower版本,也适用于standard vim

答案4

它在我的计算机上运行良好。只需确保您使用 master 中的 tmux 和 linuxbrew 中的 nvim,并且 control+backspace 在 bash 和 vim 中也能正常工作!

(也可以从 linuxbrew 获取 bash)

相关内容