이미 행에있는 내용을 완료하기 위해 bash 기록 완료를 어떻게 변경합니까?


133

두 달 전에 위쪽 화살표를 누를 때 이미 bash 기록을 자동으로 완성하는 명령을 찾았습니다.

$ vim fi

프레스

$ vim file.py

새 컴퓨터에서 이것을 설정하고 싶습니다. 큰 역사를 유지할 때 많은 시간을 절약하기 때문입니다. 문제는 내가 언급 한 곳을 기억하고 끝없는 bash 참조 및 자습서를 읽는 것이 불행히도 도움이되지 않았다는 것을 기억하지 못한다는 것입니다.

아무도 명령을 알고 있습니까?

답변:


223

아마 같은

# ~ / .inputrc
"\ e [A": 과거 검색 뒤로
"\ e [B": 검색 기록 전달

또는 동등하게

# ~ / .bashrc
[[$-== * i *]] 인 경우
그때
    ' "\ e [A"바인딩 : 기록 검색-뒤로'
    ' "\ e [B"바인딩 : 기록 검색 전달'
fi

(if 문은 대화식 모드를 확인합니다)

일반적으로 Up 및 Down은 각각 Readline 함수 previous-history와 바인딩됩니다 next-history. Up / Down의 정상적인 작동을 대신하는 대신 PgUp / PgDn을 이러한 기능에 바인딩하는 것을 선호합니다.

# ~ / .inputrc
"\ e [5 ~": 과거 검색-뒤로
"\ e [6 ~": 검색 기록 전달

수정 한 후에 ~/.inputrc쉘을 다시 시작하거나 Ctrl+ X, Ctrl+ R를 사용 하여 다시 읽도록 지시하십시오 ~/.inputrc.


그건 그렇고, 관련 문서를 찾고 있다면 :

Bash는 쉘 프롬프트와 히스토리에 GNU Readline Library 를 사용합니다.


답변 주셔서 감사합니다. 이것은 친숙하게 들리지만 불행히도 효과가 없습니다. .inputrc에 배치하면 아무것도 변경되지 않으며 .bashrc에 넣으면 화살표가 아무것도하지 못하게됩니다. 어떤 아이디어?
blokkie 2016 년

신경 쓰지 마. history-complete- *가 존재하지 않습니다. history-search- * 함수 만 존재합니다. 감사!
blokkie 2016 년

아, 나는 처음 두 가지 예를 분명히 잘못 입력했습니다 ...하지만 마지막 예는 정확했습니다. 내가 고칠 게
ephemient 2016 년

@ user1037114 : 이것은 자체 질문입니다. 자신의 게시물에 질문해야합니다.
kamaradclimber

이것은 bash에서 vi 모드를 사용하여 위 / 아래 화살표를 수정했습니다. 작동하려면 "Esc"(명령 모드)를 눌러야합니다.
Chris

5

다음을 사용하여 .inputrc를 업데이트하십시오.

"\C-[OA": history-search-backward
"\C-[[A": history-search-backward

"\C-[OB": history-search-forward
"\C-[[B": history-search-forward

4
그 열쇠는 무엇입니까?
Chris

이 키가 무엇인지 정확히 알지 못하지만 X11에서 tmux 및 st 터미널을 사용하는 동안 위쪽 및 아래쪽 키가 기록 검색을 수행하지 않은 경우이 답변 이이 기능을 수정했습니다.
razzintown

1
@razzintown은 아마도 키가 제대로 작동하기 set enable-keypad on위해 해야 할 것입니다 del( faq ). 키패드가있는 경우 화살표 키는 "\C-[OA""\C-[OB"(및 "\C-[OC""\C-[OD")입니다. 나는 이것을 명확히하기 위해 다음과 같은 답변을 게시했습니다.
MauricioRobayo

@Chris 키패드 모드 위쪽 및 아래쪽 화살표 키와 ANSI 모드 위쪽 및 아래쪽 화살표 키입니다. 아래 답변을 참조하십시오.
MauricioRobayo

3

경우 set enable-keypad on에 당신의 ~/.inputrc일부 성 (로 suckless 간단한 터미널 ) 사용자가 화살표 키를 키패드 모드에 있음을 알고 있습니다. 우분투는 다음과 같이 유용합니다 /usr/share/doc/bash/inputrc.arrows.

# This file controls the behaviour of line input editing for
# programs that use the Gnu Readline library.
#
# Arrow keys in keypad mode
#
"\C-[OD"        backward-char
"\C-[OC"        forward-char
"\C-[OA"        previous-history
"\C-[OB"        next-history
#
# Arrow keys in ANSI mode
#
"\C-[[D"        backward-char
"\C-[[C"        forward-char
"\C-[[A"        previous-history
"\C-[[B"        next-history
#
# Arrow keys in 8 bit keypad mode
#
"\C-M-OD"       backward-char
"\C-M-OC"       forward-char
"\C-M-OA"       previous-history
"\C-M-OB"       next-history
#
# Arrow keys in 8 bit ANSI mode
#
"\C-M-[D"       backward-char
"\C-M-[C"       forward-char
"\C-M-[A"       previous-history
"\C-M-[B"       next-history

따라서 모든 것이 필요한지 확실하지 않지만 다음과 같은 경우에 아프지 않을 수도 있습니다 ~/.inputrc.

# Arrow keys in keypad mode
"\C-[OA": history-search-backward
"\C-[OB": history-search-forward
"\C-[OC": forward-char
"\C-[OD": backward-char

# Arrow keys in ANSI mode
"\C-[[A": history-search-backward
"\C-[[B": history-search-forward
"\C-[[C": forward-char
"\C-[[D": backward-char

이 같은 주제에 또한 내 커서 키가 작동하지 않음 또한이 xterm 등 : 특수 키


1

ohmyzsh를 사용하면 .zshrc 에서 이것을 사용하십시오 .

bindkey '^[OA' history-search-backward
bindkey '^[OB' history-search-forward

source ~/.zshrc터미널 을 다시로드 하거나 다시 시작합니다.

출처 : https://superuser.com/a/418299/71680


역사 - 검색 - 앞으로 bindkey '\ 전자 [A'역사 검색 뒤로 bindkey '[B \ E': 무엇 zsh을 나를 위해 일하면 원본 링크에 주어진 옵션을했다
마이클 메시

-3

bash 완료를 활성화해야 할 수도 있습니다.

검사

  • /etc/profile
  • /etc/bash.bashrc
  • ~/.bashrc

위의 파일 소스 중 하나가 있는지 확인하십시오 /etc/bash_completion. 즉

. / etc / bash_completion

/etc/bash___completion위의 파일 중 하나에 의해 제공되지 않은 경우 해당 파일 중 하나에 추가해야합니다.

머신의 모든 bash 사용자가 bash를 완료하도록하려면 /etc/bash_completionfrom from /etc/bash.bashrc.

그것은 단지 당신이 bash는 완료, 소스를 원하는 사람이라면 /etc/bash_completion당신에서 ~/.bashrc.


2
탭 완성은 훌륭하지만 역사 포스터와는 다릅니다.
ephemient 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.