이전 명령에서 커서 위치를 유지하는 방법은 무엇입니까?

이전 명령에서 커서 위치를 유지하는 방법은 무엇입니까?

bash 기록에서 이전 명령을 반복하면 커서 위치가 항상 명령 끝으로 이동합니다. 마지막으로 명령이 실행된 시점부터 현재 커서 위치를 기억할 수 있는 방법을 원합니다.

이는 특정 명령에 대해 다른 명령줄 옵션을 시도할 때 유용할 수 있습니다. 이제 up옵션을 편집하려면 키를 누르고 옵션을 입력한 위치로 커서를 다시 이동해야 합니다. 가능하다면 두 번째 단계를 없애고 싶습니다.

저는 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

관련 정보