화살표 키를 사용하지 않고 마지막 명령을 어떻게 반복합니까?


115

Up이전 명령을 반복 하는 데 사용할 수 있다는 것을 알고 있습니다 . 마지막 명령을 실행하려면 단순히 Up+가 포함됩니다 Enter. 그러나에 많은 시간을 할애 하면서 Happy Hacking Keyboard 를 구입하려고 생각 했습니다 vim.

이 키보드에는 화살표 키가 없으며 이러한 종류의 동작을 얻는 방법을 아는 유일한 방법은 Ctrl+ 를 누르고 R이전 명령을 반복하는 것입니다.

화살표 키없이 UNIX 터미널에서 Up+ 를 에뮬레이트하는 쉬운 방법이 Enter있습니까?


1
터미널 태그를 사용하는 쉘로 교체해야 합니다.
Cristian Ciupitu

2
@ illuminÉ 마우스 없음 ...
quant

2006 년 해피 해킹 키보드가 중단 되지 않았습니까 ?
Peter Mortensen

@PeterMortensen 아니요 아직 사용할 수 없습니다. 첫 번째 버전을 언급하고 있지만 최신 모델을 계속 사용할 수 있습니다.
quant

답변:


164

함께 csh또는 쉘 구현 csh-like 기록 교체 ( tcsh, bash, zsh) :

!!

그런 다음 Enter.


또는 대안 적으로 :

!-1

그런 다음 Enter.


또는 Ctrl+ P,Enter


마법의 공간

또한, 점에 유의 !!하고 !-1(너무 늦을 수있는 경우) 당신이 그들을 실행할 때까지, 당신을 위해 자동 확장되지 않습니다.

사용하는 경우 bash, 당신은 넣을 수 있습니다 bind Space:magic-space으로 ~/.bashrc다음 누르면, Space당신은 실행하기 전에 검사 할 수 있도록 인라인을 자동 확장 할 명령 다음에. 이것은 특히 명령 실행에서 히스토리 확장에 특히 유용합니다. 예를 들어로 !echo시작하는 마지막 명령을 가져옵니다 echo. 마술 공간을 사용하면 명령을 실행하기 전에 미리 볼 수 있습니다.

즉 일을하는 것과의 bindkey ' ' magic-spacetcshzsh.


1
@Arman 다행입니다. 많은 역사 확장 명령이 있습니다; 링크는 그중 일부를 나열합니다. 마법 공간에 대한 일부 정보를 편집하여 이들 중 일부를 사용하는 데 도움이 될 수 있습니다.
Sparhawk

3
magic-space그것은 하나의 달콤한 옵션입니다!
fduff

1
readline이 히스토리 확장을 수행하지만 enter 키를 처음 누를 때 명령을 실행하지 않는 histverify옵션 도 shopt있습니다. 결과를 평가하고 그것이 실행하려는 것인지 결정할 수 있습니다.
Etan Reisner

2
왜 그런지 이해하지 못했습니다! CTRL-P보다 훨씬 많이 사용됩니다. CTRL-P를 사용하면 명령을 실행하기 전에 볼 수 있으며 수정할 수도 있습니다. 나는 항상 !!로 주사위를 굴리는 것처럼 느낍니다.
abonet

1
@abonet 방금 찾은 또 다른 용도 !!는 해당 위치에서 확장 사용하는 입니다. 예를 들면 sudo !!.
Sparhawk

50

명령 행 편집 기능이있는 대부분의 쉘은 Emacs 키 바인딩을 지원합니다. (작은 부분 집합)

Up     Ctrl+P
Down   Ctrl+N
Left   Ctrl+B
Right  Ctrl+F
Home   Ctrl+A
End    Ctrl+E
Delete Ctrl+D

또는 set -o vi쉘 시작 파일 (예 :) 에 추가 하여 vi 명령 편집 모드를 사용하도록 쉘을 설정할 수 있습니다 ~/.bashrc. 그런 다음 예를 들어

  • EsckEnter 이전 명령을 다시 실행하는 데 사용 합니다 (와 동일 !!). 빼기 키 -는 "이동"명령으로도 작동합니다.
  • 사용 EsckkkkkkkkkkkkEnter 또는 Esc12kEnter 12 이전 명령 (같은를 다시 실행 !-12).
  • 사용 Esc및 모션 명령 (즉, k적절히 반복되는)을 한 다음 편집 당신이 거기 찾을 bash는 명령 줄을. 당신은 여전히있을 것 기억 vi당신이 사용할 필요가 있으므로, 명령 모드 vi(예 : 편집 명령을 I, A, C, R실제로 역사에서 명령에 추가, 또는 소문자로 대응 중 하나).
    EsckisudoSpaceEnter를 들어와 같습니다 sudo !!.
  • 고급 사용자의 경우 : 당신도 (복사 할 수 있습니다 y를 하나의 라인 및 붙여 넣기 (에서 ANK) 텍스트 페이지의 또 다른에 UT)을, 그래서 당신은 비교 결과를 달성 할 수있다 !-2:- !$. 불행히도 명명 된 버퍼를 지원하지 않는 것 같습니다.

나는 터미널과의 이맥스 관계에 대해 알고 vi있었다 . 그러나 속임수는 컸다! !!
Dox

deleteZsh에서 Ctl + u를 얻었습니다
Timo

1
이것은 readline 라이브러리에 의해 구현됩니다. 추가 바로 가기는 해당 설명서에서 찾을 수 있습니다.
Spidey

28

내가 가장 좋아하는 것은 CTRL+ P그리고 CTRL+O

기본적으로 작동하며 추가 구성이 필요하지 않습니다. ^ P는 마지막 명령으로 전환하고 ^ O는 현재 행을 실행할 수있게합니다.

유의 CTRL+는 O당신이 원하는만큼 사용할 수 있습니다


2
^ O는 내 Mac에서 아무 작업도하지 않습니다.
Snowcrash

1
@Snowcrash Try^J
데이지

내가 전에 ls또는 pwd이전에 수행 한 경우에도 빈 줄을 에코합니다 .
Snowcrash

@Snowcrash ^ P 다음 ^ J ...
데이지

Ctrl + P는 HP-UX에서 작동하지 않습니다 (사용중인 쉘을 모르겠습니다). 해결 방법은`zsh '를 호출하는 것입니다.
피터 Mortensen

15

확실한! vi키 바인딩에 익숙하기 때문에 셸이 이에 응답하도록 구성하지 않겠습니까? 를 bash위해 이것을 다음 에 넣으십시오 ~/.inputrc.

set editing-mode vi

bash 인스턴스를 실행하면 파일을 다시 읽지 않으므로 로그 아웃했다가 다시 로그인하십시오.

zsh심지어 당신이 감지합니다 : 시작 스크립트의 어느 것도 편집 모드를 사용하는 방법은 하나 또는 다른 강제하지 않는 경우 bindkey 사용자의 경우 $EDITOR환경 변수가 포함 감지 vi하고 자동으로 가능하게 vi키 바인딩을. 당신이 그것을 강요해야한다면, 이것을 당신의 ~/.zshrc:

bindkey -v

그 후, 사용하는 ESC명령 줄을 입력하고 평소와 같이 kj아래로 이동합니다.

관련 항목 : 대부분의 쉘의 기본 쉘 바인딩 때문에 실제로 이맥스 바인딩입니다 Crtl-PCtrl-N이미 당신은 아무것도 변경하지 않고도 작동합니다.


9

구현하는 모든 POSIX 쉘을 통해 사용자 이동성의 옵션 (포함 ksh, zsh, bash,을 yash), 당신은 또한 사용할 수있는 fc명령을 :

fc -e : -1

예를보십시오 :

$ echo "hello"
hello

$ fc -e : -1
echo "hello"
hello

더 많은 정보 Jonathan Leffler의 역사 답변 에서 다양한 명령을 실행하십시오 .


6

모든 Mac iterm2 사용자 :

+ R를에 바인딩 할 수 있습니다 0x0C 0x10 0x0d. 터미널을 지우고 마지막 명령을 실행합니다.

iterm 2 주요 환경 설정


터미널을 지우지 않고 마지막 명령을 반복 할 수있는 방법이 있습니까?
Luke Davis

아, 신경 쓰지 마십시오.이 글을 읽는 사람은 터미널을 지우지 않고 반복하려면을 사용하십시오 0x10 0x0d(예 : 생략 0x0C).
Luke Davis

5

수퍼 유저 권한으로 명령을 자주 다시 실행해야하므로

sudo !!

sudo처음 부터 입력 하는 것을 기억 한 것처럼 이전 명령을 다시 실행합니다 .


2
나는 이것을 정말로 좋아한다. 또한 "권한이 거부되었다"에 대한 좋은 반응처럼 보인다. "나는 sudo ffs를 의미했다!"
Viktor Mellgren

3

ksh쉘은 기본 별명이 r가장 최근의 명령을 반복합니다. 그것은 바인딩됩니다 fc -s:

alias r='fc -s'

흥미롭게도 내장 bash문서 fc( help fc및 매뉴얼 자체)에 대한 문서 조차도 이것을 언급하지만 해당 쉘의 기본 별칭은 아닙니다.

이것과 함께 사용할 수있는 유용한 별칭은 r='fc -s'이므로 입력 r cc 하면 마지막 명령으로 시작하여 cc입력 r하면 마지막 명령이 다시 실행 됩니다 .

에서로 bash확장 기록을 해제 한 경우에도이 기능이 작동 set +H합니다.

에서 zsh쉘하는가 r동일한 것으로 설명되어 내장 fc -e -.

fc유틸리티는 POSIX 표준 유틸리티 입니다.


2

함께 csh또는 구현 어떤 쉘 csh-like 역사 치환 ( tcsh, bash,을 zsh), 당신은 또한 사용할 수 있습니다 !<beginning of command>마지막 명령으로 시작하는 전화 <beginning of command>.

예를 들어 당신이 달렸다면

$ tail file.txt
$ less otherfile.txt
$ !ta

!ta 실행할 것이다 tail file.txt


1

tl; dr !!은 마지막 명령을 현재 명령에 추가합니다. <backtick>!!<backtick> 마지막 명령을 실행하고 현재 명령에 출력을 추가합니다.

실제로 두 가지 변형이 있습니다.

  1. 마지막 명령 자체
  2. 마지막 명령의 결과

두 가지 예를 보여 드리겠습니다.

실시 예 1

$ mkdir /test
mkdir: /test: Permission denied

$ sudo !!
sudo mkdir /test
Password:

위에서 보았 듯이 명령을 실행하고 본질적으로 마지막 명령을 추가합니다.

또 다른 변형

실시 예 2

$ find ~/Documents "test.txt"
/Users/<user>/Documents/test.txt

$ vi `!!`
# Opens test.txt. But if you do
$ vi !!
vi find ~/Documents -name "test.txt"
VIM - Vi IMproved 8.1 (2018 May 18, compiled Oct 29 2018 06:55:58)
Unknown option argument: "-name"
More info with: "vim -h"

일에 대한 vi `!!`. 매우 유용
le_daim

0

퍼티와 같은 좋은 xterm 에뮬레이터를 사용할 때 가장 좋아하는 방법은 줄 바꿈을 포함한 명령을 선택하고 클립 보드에 복사 한 다음 마우스 오른쪽 버튼을 클릭하여 붙여 넣는 것입니다. 한 번의 클릭으로 명령이 반복됩니다. 이것은 세미콜론으로 구분 된 일련의 명령에도 적합합니다.


0

!n터미널에서 n 번째 명령을 실행 하는 데 사용할 수 있습니다 . 여기서 'n'은 history명령 행입니다 .


어떤 !?명령이 마지막 명령으로 확장 됩니까? 당신은 !!(다른 답변에서 이미 다루어 진) 과 섞이지 않습니까?
Anthony Geoghegan

미안, 실제로 나는이 시점 에서이 명령을 실험하고있었습니다. 수정 된 답변을 확인하십시오. @AnthonyGeoghegan
라비 세브 타

이것은 내가 찾고있는 바로 가기였습니다. 감사!
le_daim

0
  • History를 입력하고 실행하고 사용할 명령 앞에있는 번호를 기록하십시오. !number

  • ! -1 을 사용할 수도 있습니다 (1은 마지막으로 실행 한 명령이므로 아래에서 수행 할 때 얻은 카운트 번호로 바꾸십시오.

  • ! -2 (마지막 초 등)

0

마지막 명령을 요청할 수있는 여러 계층이 있습니다.

라인 에디터

명령 행을 입력하는 행 편집기는 ksh, bash의 라이브러리 readline 및 zsh의 zle 라이브러리에 의해 직접 제공됩니다. dash 와 같은 다른 쉘에는 이 키를 이해하는 편집 라이브러리 가 없을 수 있습니다 ( --with-libedit옵션이 활성화 된 상태에서 컴파일되지 않은 경우 ).

이것은 ksh, bash, zsh에서 작동합니다.

Ctrl- P# Emacs 모드 (이전)
Ctrl- N# Emacs 모드 (다음)
ESC- k # vi 모드 ESC는 명령 모드로 가고 k는 위로
ESC- j # vi 모드 ESC는 명령 모드로 가고 j는 아래로

역사

많은 쉘에서 제공하는 히스토리 시스템을 사용하면 일부 단축키를 확장 할 수 있습니다.

!!    # bash and zsh, may be provided by `alias \!\!='fc -e -'` in ksh.
!-1   # bash and zsh only

명령

히스토리 명령을 검색 할 수있는 명령이 있습니다.

아주 자세한 명령과 같이 (인쇄 전용) :

history 2 | head -n-1

또는 더 오래 되고 일반적으로 더 휴대하기 쉬운 fc명령 (직접 다시 실행) :

fc -e - -1

또는 더 간단 fc -s -1하지만 zsh는 fc에 대해 이러한 옵션을 허용하지 않습니다.

명령 만 인쇄 하려면 다음을 사용하십시오 fc -nl -1 -1..

편집하려면 FCEDIT텍스트 편집기 (예 : ed, emacs, vi 등)로 설정하고 fc를 직접 사용하십시오 fc -1.

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