bash 履歴で前のコマンドを繰り返すと、カーソル位置は常にコマンドの最後に移動します。最後に、コマンドが実行された時点から現在のカーソル位置を覚える方法が欲しいです。
これは、特定のコマンドに対して別のコマンドラインオプションを試す場合に便利です。up
オプションを編集するには、キーを押してオプションを入力した位置にカーソルを戻す必要があります。可能であれば、2番目のステップを取り除きたいと思います。
私はbashを使用していますが、他のシェルに対する解決策も興味深いです。
答え1
たぶんこれはあなたが探しているオプションですか?
history-preserve-point (Off) If set to On, the history code attempts to place point at the same location on each history line retrieved with previous-history or next-history.
この機能を有効にするには、次の項目に追加してください~/.inputrc
。
set history-preserve-point on
答え2
これほぼ働く
__insert_last_history_entry() {
READLINE_LINE=$(history -p '!!')
}
bind -x '"\ea" : __insert_last_history_entry' # Alt-a
ファイル(たとえばinsertLastHistory
)に保存し、コマンドラインからインポートします。
. insertLastHistory
(またはその内容をシェルに挿入し~/.bashrc
てシェルを再起動してください。)
Alt-a
新しい行動を引き起こします。
カーソル位置は変更されません
答え3
でzsh
各履歴項目のカーソル位置を覚えており、履歴項目が呼び出されるたびに呼び出すには、次の項目を追加する必要があります~/.zshrc
。
typeset -A cursor_history
save-cursor() cursor_history[$HISTNO]=$CURSOR
restore-cursor() CURSOR=${cursor_history[$HISTNO]-$CURSOR}
autoload -Uz add-zle-hook-widget
add-zle-hook-widget line-finish save-cursor
add-zle-hook-widget history-line-set restore-cursor
(履歴はシェル呼び出し間で保存されず、現在のシェルセッション内でのみ保存されます。)
また、現在編集されている行を離れると、現在のカーソル位置は保存されません。これを行うには、少なくともすべての履歴モーションウィジェットをラップし、save-cursor
まず次のことを行う必要があります。
for w (${(Mk)widgets:#.*hist*}) {
functions[${w#.}]='save-cursor; zle '$w
zle -N ${w#?}
}
答え4
指示:
- ソリューションには以下が含まれます。
tmux
- 実際にはありません覚えるカーソル位置:カーソルを行の終わりではなく行の先頭に置きます。
次の項目に追加してください
~/.tmux.conf
。############################################### ## Last command line + Home bind -n 'C-a' send-keys Up \; send-keys Home
tmux 構成の再ロード
tmux source-file ~/.tmux.conf
次に、を押すとCtrl+a
、すぐ後ろにbash
その内容が表示されます。Up
Home