新手问题 请教一个困扰我很久的问题. (有关 shell 下快捷键 rebinding)

zw963 · 2012年10月01日 · 最后由 happypeter 回复于 2012年10月02日 · 3225 次阅读

在 bash shell 下,有些特殊的快捷键,我一直有一些特殊的绑定 (通过 bash 内置的 bind 命令重新换绑快捷键到 shell 内置函数) . 倒也没啥大问题。

不过有一点很苦恼:

使用类似 Pry, IRB 这种 REPL, 快捷键又恢复成默认了。使用 irb 倒也罢了,Emacs 的 shell-mode 可以很好的使用,Pry 就不行了,满屏幕乱码 (用来显示颜色以及自动缩进的那些控制代码).

现在我的需求就是:shell 下,如何将 一个组合键 映射到另一个组合键 , 例如:将 C-b 映射到 C-j, 而且对于所有的 REPL 有效。或者说:X 下面的全局映射也行!大不了编辑器里面稍稍改下就 OK.

BTW: xmodmap 我试过,应该不行,这个只能是 控制键单个键 之间的映射。

请教各位啦:

@fsword @bhuztez @reus @happypeter @jinleileiking

我也不太会呀,不过感觉小折腾怡情,大折腾伤身啊

man 3 readline, 可以把配置写在 ~/.inputrc 里。这样所有使用 readline 的 repl 都可以享受之。

我只写了很少的配置,重点还是为了启用 edit-mode vi: https://github.com/5long/dotfiles/blob/master/inputrc

#4 楼 @5long

👍 , 太谢谢了。我刚刚看了下 /etc/inputrc, 这正是我要要的。哈哈

另外,edit-mode 不需要设定 inputrc 吧!你只需要 export 两个变量就可以了。这样在任何系统调用情况下,总可以保证 使用 VI 打开。

示例如下:

export VISUAL='vi'
export EDITOR='vi'

#3 楼 @happypeter

这实在是算不上什么折腾。呵呵,

你也看到了, @5long 一席话,同时解决了我两个问题。

一个问题,刚开始学 Linux 那会儿,一直诧异 inputrc 是干嘛的,那个时候你想破头,也不知道的. 第二个问题,就是现在这个问题。

其实我要的就是这么个提示,该这玩意儿不费什么功夫,我甚至不用重写一行代码,因为我 .bashrc 里面的 bind 设置,和 inputrc 完全一样,复制到 .inputrc 里面就 OK 了。

#6 楼 @zw963

恩,可能是我浅陋了

@5longset completion-ignore-case on 很好用,收藏了。不过把 edit-mode 设成 vi 我是在 .bashrc 里加这两行:

set -o vi
bind -m vim-insert "\C-l":clear-screen

#7 楼 @happypeter

Linux 真是搞的好复杂,一个功能这么多种方式来实现。不过你那个应该只跟 set -o vi 有关吧。

我觉得通过环境变量应该好一些,因为不光这个用到编辑器,其他很多场合都要用到,例如:git rebase -i 或者 git commit --amend, 还有 visudo 命令,一次设定,都会使用你用的编辑器。

#4 楼 @5long #8 楼 @zw963 我也学到了一些,之前不知道

#8 楼 @zw963set -o vi 之后 Ctrl-L 清屏就失灵了,所以要加 bind -m vim-insert "\C-l":clear-screen

你的环境变量设置确实 git 和很多工具都会用到,但是好像跟把命令行的编辑模式从默认的 emacs 模式 ( Ctrl-a 调到行首等等)切换到 vi 模式没有关系啊。

#10 楼 @happypeter

貌似我搞错啦,咱俩说岔了,你说的 bash-shell 下面的 edit-mode, 我现在明白了,但是我以为你说的是 Pry 下面的 edit 命令。哈哈。

#11 楼 @zw963 对,我就是这个意思

需要 登录 后方可回复, 如果你还没有账号请 注册新账号