bash의 역 검색 내에서 탐색하는 방법?


40

Bash는 Ctrl+ 를 통해 검색을 반대로하는 기능을 제공합니다 R. 그런 다음 명령의 일부를 입력하면 기록에서 피팅 항목이 표시됩니다.

이것이 내 역사라고 가정하십시오.

vim foo1
vim foo2 # I want to go here
vim foo3 # this is where I land, how to go back?

검색합니다 foo. 명중 Ctrl+ R다시하면 다음 맞춤 검색 항목을 보여줍니다. 종종 내가 의도 한 결과 과거 너무 빠르고 탐색 오전 것을, 나에게 어떻게 vim foo3보여지고 지금은 다시 가고 싶지 vim foo2.

따라서 내 질문은 : 역방향 검색 내에서 어떻게 탐색합니까?


어떤 터미널을 사용하십니까? 예 : gnome-terminal, konsole 등 ...
varesa

1
글쎄, 나는 그것에 익숙하지 않다 ... 열쇠는 ctrl + S이어야하지만, 일부 단말기 는 역 검색에 도달하기 전에 열쇠를 먹는 것처럼 보인다
varesa

Ctrl + Shift + R-Ctrl + R 동안 정방향 검색
devansvd


답변:


36

forward-search-history기본적으로 바인딩 되는 기능을 통해이에 액세스 할 수 있습니다 ctrl+s. 불행히도 기본값마다 ctrl+s신호를 보내는 데 사용 xoff되므로 검색 방향을 변경하는 데 사용할 수 없습니다. 문제 해결을위한 두 가지 솔루션이 있습니다. 하나는 xoff/xon신호 전송을 비활성화 하고 다른 하나는 키 바인딩을 변경합니다.forward-search-history

xon / xoff 비활성화

stty -ixon터미널에서 실행 하거나에 추가하십시오 ~/.bashrc. 히스토리 기능 ctrl+s을 사용하는 데 사용할 수 있습니다 forward-search-history.

제어 흐름에 대한 자세한 내용은 터미널에서 실수로 Ctrl-S를 누른 후 정지하는 방법을 참조하십시오. 그리고 일부 답변

키 바인딩 변경

당신의 기본 동작을 변경하지 않는 경우 ctrl+s에 대한 키 바인딩을 변경할 수 있습니다 당신 forward-search-history과 함께 bind. 대부분의 키가 이미 bash에 정의되어 있으므로 창의력을 가져야 할 수도 있습니다.

bind "\C-t":forward-search-history

ctrl+t앞으로 검색 기록에 바인딩 되지만 기본적으로 ctrl+t실행됩니다.transpose-chars


나는 당신의 첫 번째 해결책 stty -ixon을 시도했고 zsh아주 잘 작동합니다. 그러나 xoff/xon신호 를 비활성화하는 데 원치 않는 부작용이 있습니까?
학생

@student ctrl+s더 이상 터미널 출력을 일시 중지하는 데 사용할 수 없습니다 . 이것이 문제가되기 전에 한번도 사용하지 않았다면
Ulrich Dangel

1
가치있는 것을 위해 두 번째 해결책을 찾았습니다. 좋은 물건! C-s서버 로그에 tail을 사용할 때 .. 를 눌러 콘솔을 고정시킬 수 있다는 것을 결코 알지 못했습니다 . 깔끔한! (나는 다른 upvote에 :) 있었으면 좋겠다)
아슈 JINDAL

OSX에서 작동하는 옵션 # 2를 얻을 수 없습니다. 대신이 작업을 수행해야했습니다.bind '"\C-t": history-search-forward'
stiemannkj1

0

bash가 제공하는 기본 역방향 검색 및 정방향 검색의 대안으로 다음을 살펴볼 수 있습니다.

fzf , 자체 설명 된 "명령 줄 퍼지 찾기".

bash (및 다른 터미널)의 기본 역방향 검색을 대체 할 수 있습니다.

장점은 다음과 같습니다.

  • 기록에서 명령 목록을 인쇄합니다
    • Ctrl + R을 다시 눌러 시간순 또는 관련성 정렬을 토글합니다.
  • 화살표 키를 사용하여 탐색 할 수 있습니다 (또는 Ctrl + J / Ctrl + K).
  • 여러 바늘 검색 가능

내 워크 플로는 이제 내가 제어하는 ​​컴퓨터의 기본 역방향 검색보다 fzf에 전적으로 의존합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.