C-x r
readlineライブラリの1つに保存されている設定を再ロードするために、キーシーケンスを使用してキーバインディングを作成したいと思います。bash
~/.bashrc
~/.inputrc
re-read-init-file
readlineの設定を再ロードするには、次の機能を使用できると思いましたman 3 readline
。
re-read-init-file (C-x C-r)
Read in the contents of the inputrc file, and incorporate any bindings or variable assignments found there.
設定を再ロードするには、またはコマンドをbash
使用できます。しかし、シェルコマンドとreadline関数を組み合わせる最良の方法は何であるかわかりません。だから私は2つのキーバインディングの組み合わせを思いついた。source
.
bind '"\C-xr": ". ~/.bashrc \C-x\C-z1\C-m"'
bind '"\C-x\C-z1": re-read-init-file'
Bashを押すと、C-x r
次のことが起こります。
. ~/.bashrc `~/.bashrc` is inserted on the command line
C-x C-z 1 `C-x C-z 1` is typed which is bound to `re-read-init-file`
C-m `C-m` is hit which executes the current command line
~/.inputrc
tmuxの内側には1つが編集用で、もう1つはシェル用のウィンドウがあり、設定ファイルを変更する~/.bashrc
と、シェルに入力した後に変更C-x r
(新しいエイリアスまたは新しいキーバインディング)が次のように適用されることがわかるため、うまくいくようです。ウィンドウを閉じずに新しいシェルをもう一度開きます。
しかし、同じ結果を得るためのより良い方法はありますか?特に履歴にエントリを残さずにコマンドを実行できますか?C-p
最後に実行されたコマンド呼び出しをクリックすると取得されますが、. ~/.bashrc
シェル構成を再インポートする前にコマンドを実行した方がよいでしょう。
私は同じ問題がありますzsh
:
bindkey -s '^Xr' '. ~/.zshrc^M'
同様に をクリックすると、C-x r
コマンドが. ~/.zshrc
履歴に書き込まれます。ソースを再構成するより良い方法はありますかzsh
?
ベストアンサー1
実行するためにコマンドラインにコマンドを挿入しないでください!これは非常に脆弱です。現在、プロンプトに何も入力されていないとします。代わりに、 line-edit コマンドではなくシェルコマンドにキーをバインドします。
バッシュでは、以下を使用してください。bind -x
。
bind -x '"\C-xr": . ~/.bashrc'
readline 設定も再読み込みするには、キーバインディングで readline コマンドと bash コマンドを混在させる簡単な方法はありません。不器用なアプローチは、2つのキーシーケンスを含むreadlineマクロにキーをバインドすることです。 1 つは実行される readline コマンドにバインドされ、もう 1 つは bash コマンドにバインドされます。
bind '"\e[99i~": re-read-init-file'
bind -x '"\e[99b~": . ~/.bashrc'
bind '"\C-xr": "\e[99i~\e[99b~"'
zsh では、次を使用します。zle -N
関数をウィジェットとして宣言してからbindkey
ウィジェットをキーにバインドします。
reread_zshrc () {
. ~/.zshrc
}
zle -N reread_zshrc
bindkey '^Xr' reread_zshrc