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
- 실제로는 없습니다기억하다커서 위치: 커서를 줄 끝이 아닌 줄의 시작 부분에 위치시킵니다.
다음 항목에 추가하세요
~/.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