iPython Like Shell의 명령 히스토리


24

우분투에서 파이썬 프로그래밍을하지 않는 사람들에게 ipython은 스테로이드의 파이썬 쉘이지만 알려진 이름 (예 : 탭을 누를 때 bash가 수행하는 것과 동일한 방식)을 기반으로 autcompletes라는 놀라운 기능을 가지고 있습니다. 그러나 명령 입력을 시작하고 위로 누르면 bash와 같은 전체 기록을 스크롤하지 않고 동일한 문자열 문자로 시작한 최근 명령을 통해서만 스크롤됩니다.

따라서 scp -r -P 8000 -l user server.com:~/dir/to/copy ./몇 가지 다른 명령과 같은 긴 명령을 수행 한 경우. 입력을 시작 scp하고 눌렀을 경우 bash는 전체 기록을 스크롤하는 대신 이전에 표시된 명령을 표시합니다.

bash에 이와 같은 확장명이 있습니까? 또는 이런 종류의 기능을 제공하는 쉘이 있습니까?

답변:


26

Bash에도 해당 기능이 있지만 기본적으로 활성화되어 있지 않습니다. 이것을 다음과 같이 붙여서 커서를 위 / 아래로 바인딩 할 수 있습니다 ~/.inputrc.

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

Ctrl대신 + 위 / 아래 에 바인딩하는 것을 선호합니다 .

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

편집 : 전체 단어 를 유지 ctrl+left하고 ctrl+right앞뒤로 이동 하려면 다음 줄도 ~/.inputrc파일에 포함 하십시오.

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

이 팁을 사용하여 터미널에서 Ctrl + 왼쪽 / 오른쪽을 사용하여 다음 / 이전 단어로 이동할 수 없으므로 전체 목적이 손상됩니다. 해결 방법이 있습니까?
zetah

@zetah 나는 단어 이동에 대한 해결책을 편집했다
wim

1
모든 기본값을 유지하려면 $include /etc/inputrc가급적 첫 번째 줄에을 추가 할 수도 있습니다 .
Tulio Casagrande

9

Ctrl+ 키 R를 누르고 몇 글자를 입력 해보십시오 . 역순으로 작동합니다.


6

그리고 bash의 환상적인 역사 확장 바로 가기를 잊지 마십시오. 1

나는 팔에 문신을하지 않았거나 암기 한 경우를 대비하여 맨 페이지에서 일부 발췌를 게시하고 있습니다.

   Event Designators  
       An event designator is a reference to a command line entry in the  his
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

나는 종종 이전 명령의 마지막 '단어'를 참조하는 기능을 사용합니다. 예 :

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

두 경우 모두 !$일치 /foo/shmoo/adir.horribilus.foo합니다.


1 ... csh에서 가져 왔습니다. bash의 기능 절도 범위를 완화하기 위해 bash 매뉴얼 페이지에

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

따라서 "유사"합니다. 이 중 하나라도 csh또는에 침입 할 수 있습니다 tcsh. 또는 csh 자손 중 어느 것이 든별로 훌륭하지 않다는 사실 때문에 사용하지 않습니다 bash.


0

위에서 언급 @ ak2와 비슷한 대안이 있지만 새 .inputrc 파일을 만들 필요는 없습니다.

대신 sudo 권한이 있으면 / etc / inputrc 파일에서이를 활성화 할 수 있습니다. 이 파일에는 내역 검색 기능 (최소 18.04 이상)을 포함한 다양한 키보드 설정이 있습니다. / etc / inputrc에서 발췌 한 내용은 다음과 같습니다.

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

sudo 파일 편집기 (예 : $ sudo vim)를 사용하여 맨 아래 두 줄의 주석을 해제하면 새 터미널 세션에 내역 검색 기능 (모든 사용자)이 있습니다.

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