방금 입력 한 접두사로 이전 명령을 검색합니다.

위쪽 및 아래쪽 화살표를 사용하여 명령 기록을 탐색 할 수 있습니다.

In Matlab과 같은 일부 IDE에서는 무언가를 입력 한 다음 화살표 키를 누르면 입력 한 내용으로 시작하는 히스토리 명령 만 스크롤합니다. 정말 편리하지만 쉘 터미널에서는 작동하지 않습니다.

쉘 터미널에서 유사한 기능을 얻을 수있는 방법이 있습니까? 터미널 사용의 효율성을 높이기위한 다른 팁이 있습니까?

댓글

답변

원하는 것은 Ctrl 입니다. R .

Ctrl R 를 입력 한 다음 원하는 명령의 일부를 입력합니다. Bash는 첫 번째 일치 명령을 표시합니다. Ctrl R 를 계속 입력하면 bash는 이전 일치 명령을 순환합니다.

기록에서 뒤로 검색하려면 Ctrl 를 입력합니다. 대신 S . ( Ctrl S 가 그렇게 작동하지 않으면 XON / XOFF 흐름 제어를 비활성화해야 함을 의미합니다. 이렇게하려면 stty -ixon.)

man bash의 “검색 중”에 설명되어 있습니다.

댓글

  • Ctrl-Q : 이미 먼저 흐름 제어를 끄지 않고 터미널을 정지했습니다.

답변

다음 항목을 ~/.inputrc에 배치합니다.

"\e[5~": history-search-backward "\e[6~": history-search-forward 

이 항목은 Page Up Page Down 은 원하는대로 작동합니다. (일부 배포판에는 이미 구성되어 있습니다.) 개인적으로 Ctrl + R kbd보다이 방법이 더 편리합니다. > 또는 history.

댓글

  • 현재 모든 답변에서 가장 편리한 방법입니다. u plz 조금 줘 작동 메커니즘에 대한 설명?
  • ~/.inputrc 또는 /etc/inputrc 또는 환경 변수 $INPUTRC는 bash (셸)를 포함하여 readline을 사용하는 모든 애플리케이션의 라인 편집 구성 파일입니다. 여기에는 다음 두 가지를 포함하여 특정 기본 라인 편집 기능이 있습니다. bash ‘의 매뉴얼 페이지에서 이러한 키워드 중 하나를 검색하여 자세히 알아 봅니다. \e[5~ / \e[6~는 대부분의 터미널 에뮬레이터에서 Page Up / Down 키에 의해 생성 된 이스케이프 시퀀스입니다. 확인하려면 cat 명령을 실행 한 다음이 키를 누릅니다 (이스케이프 바이트는 터미널에서 ^[로 표시되며 inputrc에서 \e).
  • 원래 질문의 예에서는 Matlab에서 위 / 아래 키가 이러한 방식으로 작동한다고 말합니다. inputrc에 Up 및 Down 시퀀스를 배치하고이 작업에 할당하면 어떤 일이 발생했는지 보는 것이 흥미로울 것입니다. 제대로 작동하거나 기본 동작과 충돌하므로 불쾌한 부작용이 있습니다. 나는 ‘ 모르겠습니다. ‘이를 실험 해 보시기 바랍니다.
  • echo $INPUTRC 할 때 비어 있습니다. ‘ Ubuntu 14.04를 사용하고 있습니다.
  • 개인적으로이 작업을 수행하기 위해 위쪽 및 아래쪽 화살표를 재정의하는 것을 선호합니다. "\e[A": history-search-backward"\e[B": history-search-forward

답변

^ r / ^ s 기록 외에 i -search :

alt . 는 커서에 이전 명령의 마지막 “단어”를 삽입합니다. 이전 명령에서 마지막 단어를 얻으려면 반복하십시오. (그러나 후행 &는 백그라운드 명령의 마지막 단어로 간주됩니다.)

mkdir foo, cd alt- 점. 위쪽 화살표 ^ a, alt-d (앞으로 단어 삭제), cd보다 훨씬 빠릅니다.

두 번째에서 마지막 단어를 얻으려면 다음을 사용하세요. esc - 2 alt+. (예 : alt+.에 emacs 스타일 숫자 인수를 사용합니다.음수는 끝부터 시작하고 양수는 시작부터 앞으로 계산합니다.) 그러나 이것은 일반적으로 “가치가있는 것보다 더 많은 문제입니다. 어떤 시점에서는 마우스에 도달하여 복사 / 붙여 넣기 또는 위쪽 화살표 및 ^를 사용하는 것이 더 빠릅니다.” w / ^ y 부분 (아래 참조).


터미널이 제대로 / 적절하게 설정되어 있으면 ctrl-left 및 ctrl-right가 단어 단위로 앞뒤로 이동합니다. 그렇지 않다면 적어도 alt-b와 alt-f는 같은 일을 할 것입니다.


ctrl- /은 실행 취소입니다. 조금 넘었을 때 실행을 취소 할 수 있으면 자동 반복을 사용하여 단어를 훨씬 더 효율적으로 삭제할 수 있습니다.


보다 강력한 명령 믹싱 / 매칭은 작동하는 킬링을 사용하는 것입니다. Emacs 에서처럼. ctrl-y는 마지막 ctrl-w / ctrl-u / ctrl-backspace / alt-d를 붙여 넣습니다. alt-y는 이전에 죽인 텍스트를 순환합니다.

여러 개의 ctrl-w 또는 연속 된 모든 것이 kill-ring 항목을 만듭니다. 두 항목을 제거하고 나중에 하나만 붙여 넣으려면 왼쪽 및 오른쪽 화살표 또는 다른 항목을 사용하여 항목을 분리하십시오.

이 모든 항목을 결합하면

  • 명령 입력 시작
  • ctrl-r 이전 명령으로 돌아가서 control-w 또는 이와 유사한 명령으로 일부를 잡습니다.
  • esc-r 또는 alt+r 일부를 삭제하기 전의 상태로 복원합니다.
  • alt- > 기록의 끝으로 이동 (즉, 아래쪽 화살표 끝까지), 중간에 있던 명령으로 돌아갑니다.

기타 대화 형 사용 팁 :

shopt -s globstar를 활성화하면 **/*.c를 수행 할 수 있습니다 (현재 dir). 때로는 대화 형 사용에 편리하지만 일반적으로 find -name "*.c" -exec foo {} +가 더 좋습니다.

bash 스크립트를 작성하는 경우 도 대화 형 셸에서 활성화됩니다. 때로는 *.!(c|h)와 같은 항목이 끝나지 않는 파일과 일치하는 용도를 찾습니다. .c 또는 .h 사용

ls -l, less 및 기타 작업에 대해 원하는 별칭 찾기 많이. (cp -i, mv -irm -I는 좋습니다. 습관을 들이지 마십시오. 따라 선택적 rm을 수행합니다. GNU rm “s-모든 인수에 대해 한 번 묻습니다.)

alias m=less ( “more”의 경우 m). less, 로 설정했습니다. 를 이전 / 다음 파일 (lesskey). 기본값은 자동 반복과 함께 사용할 수없는 다중 키 누르기 시퀀스입니다.


GNU 화면 내에서 모든 작업을 수행하는 것을 좋아합니다. 번호가 매겨진 화면 창을 추적하는 것이 더 쉽습니다. Konsole (또는 내가 시도한 다른 터미널 에뮬레이터)에있는 탭의 보트로드. screen를 아직 모른다면 tmux가 더 새롭고 덜 복잡하기 때문에 배우십시오.

다음을 사용하여 새 셸을 여는 기능과 같은 기능을 얻으려면 다른 쉘과 동일한 cwd를 사용합니다. 저는 cd / pushd / popd 용 사용자 정의 후크를 사용하여 cds 8를 사용하여 무엇이든 cd dir screen window 8의 my shell이 사용하고 있습니다. 이것은 screen 세션이 하나만있는 한 screen 세션 외부의 쉘에서도 작동합니다.

Comments

  • 내가 ‘ ” 올바르게 구성되지 않은 것 “. 여기에있는 많은 단축키가 작동하지 않습니다. ‘ Ubuntu 14.04의 스톡 터미널을 사용하고 있습니다. 어떻게 구성 할 수 있나요?
  • @JorgeeFG : KDE로 전환하기 전에 Ubuntu 14.04에서 gnome-terminal를 사용하는 즉시 작동했다고 생각합니다. 관련 옵션은 터미널 설정, esc-prefix vs hig에 있습니다. h-bit 및 기타 설정. 그들 중 일부는 ‘ ssh를 통해 완벽하게 작동하지 않습니다. (예를 들어 ctrl 왼쪽 / 오른쪽 화살표 키의 이스케이프 코드를 뭉치면 문자 그대로 5D가 나타납니다.)

Answer

~/.inputrc

"\e[A": history-search-backward "\e[B": history-search-forward 

이것은 egmont의 답변과 유사하지만 Page Up 및 Page Down을 사용하는 대신 Arrow Up 및 Arrow Down에 이스케이프 시퀀스를 사용합니다.이 방법은 Mac에서 사용하는 것이 훨씬 더 편리합니다.

답변

저는 항상 큰 HISTSIZE 값을 사용하여 더 긴 기록 목록을 유지하고 타임 스탬프 값이있는 HISTTIMEFORMAT 명령이 언제 실행되었는지 알 수 있습니다.

export HISTSIZE=10000 export HISTTIMEFORMAT="%m/%d/%Y %T " 

답변

일반적으로 사용하는 수단은 iv grep

IE :

history | grep <command im looking for> 

명령 p> 그러면 해당 명령이 포함 된 입력 한 명령의 번호가 기록 된 내역이 표시되며 다음을 사용하여 해당 명령을 다시 실행할 수 있습니다.

!<number listed in history command> 

>

IE :

history | grep history

142 history 143 history | grep lvresize 568 history | grep echo 570 history | grep echo 571 history | grep history 

다음 : !571

반복합니다 history | grep history

댓글

  • CR = 훨씬 더 좋음 + 훨씬 더 안전함
  • 아마도 개인적으로 대부분의 명령을 찾는 데 더 빠른 수단이되기 위해 grep에 파이프 된 기록을 발견했습니다. 안전에 관한 한 ‘ 무슨 뜻인지 잘 모르겠습니다. cR로 검색하는 것에 비해 히스토리를 사용할 때 내재 된 위험은 무엇입니까?
  • @ Gravy 나는 PSkocik이 ! 히스토리 대체가 덜 안전하다는 것을 의미한다고 생각합니다.
  • @Gravy 내재 된 위험은 실수로 잘못된 라인을 얻는 것입니다. Control-S를 사용하고 xon / xoff 흐름 제어를 활성화하지 않는 한 (종종 기본값) 터미널이 정지 된 이유를 알 수 없습니다. 그렇다면 Control-Q가 다시 가져올 것입니다.
  • @PSkocik에 동의합니다. cr은 ‘이기 때문에 훨씬 더 좋습니다. 동일한 방식으로 다시 실행하는 것보다 히스토리 라인을 편집하기가 더 쉽습니다. 정확히 똑같은 명령을 다시 실행하는 것은 복잡한 한 줄에 변형을 다시 입력하거나 긴 경로에서 다른 파일을 탭으로 완성하는 시간을 절약하기 위해 할 수있는 간단한 경우입니다. 내 대답을 참조하십시오.

답변

매일 4 개의 팁을 사용했습니다 (및 기타) 내 bash 터미널의 em> :

  • 마지막 명령 실행 : !!

  • 명령 실행 N 기록 : !N

  • 접두어

    기록에서 : !prefix:p

  • 접두사 로 시작하는 마지막 명령 실행 기록에서 : !prefix

댓글

  • 역사에서 N 명령을 사용하는 것은 대부분의 인간에게 발에 자신을 쏠 수있는 최고의 경로 🙂 다음과 같이 말하면됩니다.

답변

If bash 대신 zsh를 사용해도 괜찮습니다. oh-mi-zsh 를 사용할 수 있습니다. 그에 대한.

위쪽 및 아래쪽 화살표를 사용하여 명령 기록을 탐색 할 수 있습니다. 또한 텍스트를 이미 입력 한 경우에도 동일한 탐색이 가능합니다 (Mathlab에서와 같이).

수정 : Oh-my-zsh는 많은 다른 기능을 포함하는 대규모 개발자 지향 소프트웨어 패키지입니다. 별칭, 테마, 플러그인. 이러한 추가 기능을 사용하면 단축키보다 배포판이 더 복잡해집니다.

https://github.com/robbyrussell/oh-my-zsh

댓글

  • oh-my-zsh에는 수많은 내용이 포함되어 있습니다. 다음과 같이 말할 수 있습니다.이 정확한 기능은 특정 설정이나 앱만 있으면 해당 배포판에 포함되어 있습니다.
  • 게시물을 편집했습니다. 단순한 앱보다 크다고 경고했습니다.

Answer

다음 별칭을 ~ / .bashrc에 추가

alias h="history | awk """""{$1="";print}""""" |sed "s/^ *//" |grep -v "^h " | sort | uniq | grep" 

사용법 : h fire fire 가 포함 된 명령 목록을 가져옵니다. 또는 h ^fire fire 로 시작하는 명령 목록을 가져옵니다.

이는 일련의 명령을보고 싶을 때 유용합니다. 동시에.

그런데 """""는 추악하지만 작은 따옴표로 묶인 작은 따옴표를 피할 수있는 다른 방법을 찾을 수 없었습니다.

댓글

  • fyi-h="history | awk '{\$1=\"\"; print}'가 작동합니다. 또는 함수를 생성하고 호출합니다.
  • DarkHeart에게 감사합니다.하지만 귀하의 코드를 시도했지만 내 환경에서 작동하지 않는 것으로 나타났습니다. 내 환경에 뭔가 다른 것이있을 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다