前のコマンドでカーソル位置を維持するには?

前のコマンドでカーソル位置を維持するには?

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
  • 実際にはありません覚えるカーソル位置:カーソルを行の終わりではなく行の先頭に置きます。

  1. 次の項目に追加してください~/.tmux.conf

    ###############################################
    ## Last command line + Home
    
    bind -n 'C-a'    send-keys Up \; send-keys Home
    
  2. tmux 構成の再ロード

    tmux source-file ~/.tmux.conf
    

次に、を押すとCtrl+a、すぐ後ろにbashその内容が表示されます。UpHome

関連情報