如何避免.bashrc和.inputrc中的某些行被加载到tmux中?

时间:2014-03-07 15:17:00

标签: readline tmux

我的.inputrc中有这些行:

"(": "\C-v()\ei"
"[": "\C-v[]\ei"
"{": "\C-v{}\ei"
"\"": "\C-v\"\C-v\"\ei"
"\'": "\C-v\'\C-v\'\ei"

这会自动关闭终端中的引号和括号。但它在tmux会话中造成不便:当我将包含引号的文本发送到另一个窗格(vim)到另一个窗格(bash / python / R等)时,每个引用变成两个,非常烦人。

是否可以在(仅限于)tmux中禁用这些行?

2 个答案:

答案 0 :(得分:1)

tmux设置TMUX环境变量,所以在.bashrc(或.profile或其他)中:

if [ '' = "$TMUX" ] ; then
  echo not in TMUX
else
  echo in TMUX
fi

您可以将INPUTRC设置为覆盖默认的.inputrc位置,这样您就可以拥有一个tmux和一个非tmux,并根据TMUX在.bashrc中导出合适的INPUTRC值。您甚至可以根据“公共”文件和“非tmux会话”文件为该会话编写合适的.inputrc(例如在/ tmp中)。

不幸的是tmux导出TMUX,因此从tmux会话启动的子shell将无论如何设置TMUX。还没找到方法。

答案 1 :(得分:1)

我最终在〜/ .bashrc中执行此操作:

if [[ '' = "$TMUX" ]]
then
    set -o vi
    bind -m vi-insert '"(" "\C-v()\ei"'
    bind -m vi-insert '"[" "\C-v[]\ei"'
    bind -m vi-insert '"{" "\C-v{}\ei"'
    bind -m vi-insert '"\"" "\C-v\"\C-v\"\ei"'
    bind -m vi-insert '"\047" "\C-v\047\C-v\047\ei"'
else
    echo Welcome to Tmux!
fi

更新

采用user3392484的建议,我发现这更好:

if [[ '' = "$TMUX" ]]
then
    export INPUTRC=~/.inputrc
else
    export INPUTRC=~/.tmux.inputrc
    echo Welcome to Tmux!
fi