bindkey
私のファイルにはいくつかのコマンドがありますが、.zshrc
期待どおりに動作します。tmux
sを含む同じ.zshrc
タスクの実行を開始しましたが、bindkey
動作しません。- しかし、tmux内のコマンドプロンプトに手動で入力した場合する再び動作します。
私は空のtmux.conf(tmux -L test -f /dev/null
)を使ってみたので、これが私のtmux confではないことを知りました。
- zsh 5.8.1 (x86_64-ubuntu-linux-gnu)
- マルチプレクサ3.2a
- Gnome シェル (デフォルト TERM=xterm-256color)
tmuxが何とかキーバインディングをリセットするように後ろに私の.zshrcを実行しますか?
いくつかのテストの後、私のエントリからこの行を削除すると.zshrc
問題が解決することがわかりました。
export EDITOR=`which vim`
なぜ?
答え1
他の一般的なシェルと同様に、zshにはEmacs様(モードレス)とVi様(挿入とコマンドモードを含む)の2つのコマンドライン編集モードがあります。他の人気シェルとは異なり、zsh は Vi と同様のモードで起動します。zshが環境変数で始まるか含まれているVISUAL
場合EDITOR
。vi
EDITOR
環境変数を設定しています.zshrc
。ターミナルを開き、ターミナルエミュレータプログラムがzshを起動すると設定されないため、EDITOR
zshはEmacsモードで起動します。このシェルの内部で tmux セッションを開始すると、EDITOR
tmux 環境の文字列を含むように設定されるため、tmux ウィンドウで zsh が起動したときにすでに設定されています。vi
したがって、tmuxウィンドウ内では、zshはViと同様のモードで実行されます。
Viに似た動作モードには、挿入とコマンドの2つの編集モードがあります。それぞれには独自のキーバインディングがあり、bindkey
挿入モードでのみ使用できるオプションはありません。したがって、カスタムバインディングはコマンドモード、つまりを押した後は機能しませんEscape。ほとんどのデフォルトバインディングも機能しません。
これを防ぐには、Viのようなモードが望ましくないようbindkey
です.zshrc
。
bindkey -e
EDITOR
本当の問題は、間違った場所に設定していることです。通常、シェル初期化ファイル(.bashrc
、、.zshrc
)に環境変数を設定しないでください。環境変数は、そのシェルで実行されているプログラム内でのみ適用されるためです。 GUIランチャーから直接実行されるプログラムはこれらの変数を継承しないので、好みのエディタを呼び出さない。代わりに、たとえば、ログインセッションの開始時に読み込まれるファイルに環境変数を設定します~/.profile
(ほとんどのX11ベースの設定を含むクラシックUnixシリーズセッションの場合)。
答え2
まあ、私の考えでは、これは最終的に地域の問題になりそうですが、私が見つけたものは次のとおりです。
- 私の.zshrcには次の行が含まれています。
export EDITOR=`which vim`
- このコマンドは、実行可能なNeovim AppImageへのファイルパスを生成します。
- EDITORをファイルに設定した後は何も機能しません。
export
影響を与えない項目を削除します。- varが次の場合にのみ設定されるようにコーディングしてください。いいえtmuxでも役に立ちません。
これがバグなのか、それとも何(tmux?zsh?私が使っているオートコンプリート機能?gnome-terminal?neovim?アプリケーションイメージの深いカーネルに関するもの)なのかを調べようとする必要はないようです。 )...
しかし、他の人が影響を受けないようにするために、質問で詳しく説明されているように
https://github.com/marlonrichert/zsh-autocomplete/
機能しないバインディングキー(他のキーもあるかもしれません、わからない)
bindkey '\t' menu-select "$terminfo[kcbt]" menu-select
bindkey -M menuselect '\t' menu-complete "$terminfo[kcbt]" reverse-menu-complete