看起来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
实际上是+ Control。BackSpace您可以按Ctrl+V然后按您要查找的键来查看键码。您将看到BackSpace返回^H
。
现在它应该可以使用将Control+绑定到删除前一个单词(或)BackSpace的 bash 函数。但是,我无法让它工作。它与不同的键配合得很好(例如,使+删除前一个单词),但出于某种原因,我无法让它与 配合使用。backward-kill-word
unix-word-rubout
"\C-H": backward-kill-word
"\C-E": backward-kill-word
CtrlEBackSpace
因此,作为一种解决方法,我们只需将Ctrl+映射Backspace到已经映射到 的Ctrl+即可。因此,当您按+时,它将被转换为+ ,进而将发送。我是从以下来源获得此解决方法的想法的Wbackward-kill-word
CtrlBackspaceCtrlWbackward-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.vim
或vim.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.5
和lower
版本,也适用于standard vim
。
答案4
它在我的计算机上运行良好。只需确保您使用 master 中的 tmux 和 linuxbrew 中的 nvim,并且 control+backspace 在 bash 和 vim 中也能正常工作!
(也可以从 linuxbrew 获取 bash)