터미널 명령 행에서 커서를 움직이는 가장 빠른 방법은 무엇입니까?


156

터미널에서 주어진 매우 긴 명령 행에서 이동하는 가장 좋은 방법은 무엇입니까?

말 난 화살표 키를 사용하거나 Ctrl- R이 긴 명령 행을 얻을 :

./cmd --option1 --option2 --option3 --option4 --option5 --option6 --option7 --option8 --option9 --option10 --option11 --option12 --option13 --option14 --option15 --option16 --option17 --option18 --option19 --option20 --option21 --option22 --option23 --option24 --option25 --option26 --option27 --option28 --option29 --option30 --option31 --option32 --option33 --option34 --option35 --option36 --option37 --option38 --option39 --option40 --option41 --option42 --option43 --option44 --option45 --option46 --option47 --option48 --option49 --option50 

이제 커서를 움직여서 (줄의 시작 또는 끝에서 시작하여) 커서 --option25를 수정해야합니다.

가는 가장 빠른 방법은 무엇입니까? 내가 일반적으로 할 것은 Ctrl- A시작에 도착 후 반복 Alt- F단어, 앞으로 단어를 이동하는 (또는 Ctrl- E끝을 이동하기 Alt- B다음 뒤로 이동). 그러나 너무 많은 시간이 걸리는 긴 줄. 수정해야 할 부분을 직접 검색하고 바로 이동할 수있는 방법이 있어야합니다 (예 : option25?

답변:


107

아직 닫히지 않았으므로 몇 가지 추가 옵션이 있습니다.

  • Ctrl+ x다음에 Ctrl+ e를 사용 하여 $FCEDITor로 지정된 편집기에서 현재 행을 엽니 다 ( $EDITOR또는 emacs그 순서대로 시도).
  • 명령을 이전에 실행 한 경우 Ctrl+ r를 눌러 역 히스토리 검색 option25을 수행하고이 경우 유형을 입력하십시오 . 라인이 표시됩니다. Tab이 시점에서 편집을 시작하려면 누르십시오 .
  • s///수정 자 와 함께 히스토리 확장을 사용하십시오 . 예를 들어 !-2:s/--option25/--newoption/마지막에서 두 번째 명령을 다시 실행하지만 option25를 대체하십시오. 마지막 ./cmd명령 을 수정하려면 다음 !string구문을 사용하십시오 !./cmd:s/--option25/--newoption/
    . / 대신에 모든 구분 기호를 사용할 수 있습니다.
  • 이전 줄을 편집하는 경우 빠른 대체를 사용할 수 있습니다. ^--option25^--newoption
  • 캐릭터 검색. 이 인원으로 언급하고, 함께 정기적으로 이맥스 모드에서 수행 할 수 Ctrl+ ]앞으로 검색 및 Ctrl+ Alt+ ]뒤로 검색합니다.

두 번째 옵션을 권장합니다. Ctrl+ r는 매우 편리하고 빠르며 편집기를 사용하지 않아도되며 명령 실행 전에 결과가 표시됩니다 (히스토리 확장과 달리).


203

명확하게하기 위해, " 터미널 명령 행 에서 커서를 빠르게 이동시키는 방법"을 원하지 않습니다 . 실제로 원하는 것은 쉘 프로그램 에서 명령 행을 빠르게 탐색하는 방법 입니다.

예를 들어 Bash 는 매우 일반적인 셸입니다. Readline 라이브러리를 사용 하여 명령 행 입력을 구현합니다. 말하자면, Readline 바인딩은 bash에서만 사용되기 때문에 매우 편리합니다. 예를 들어, gdb는 Readline을 사용하여 입력을 처리합니다.

Readline 문서에서 모든 탐색 관련 바인딩 등을 찾을 수 있습니다. http://www.gnu.org/software/bash/manual/bash.html#Readline-Interaction

위의 링크가 다운되면 짧은 복사하여 붙여 넣기 :

베어 에센셜

  • Ctrl-b 한 문자 뒤로 이동합니다.
  • Ctrl-f 한 문자 앞으로 이동합니다.
  • [DEL] 또는 [Backspace] 커서 왼쪽의 문자를 삭제하십시오.
  • Ctrl-d 커서 아래의 문자를 삭제합니다.
  • Ctrl-_ 또는 Cx Cu 마지막 편집 명령을 취소합니다. 빈 줄로 되돌릴 수 있습니다.

운동

  • Ctrl-a 줄의 시작으로 이동합니다.
  • Ctrl-e 줄의 끝으로 이동합니다.
  • Meta-f 단어가 글자와 숫자로 구성된 단어를 앞으로 이동합니다.
  • Meta-b 단어를 뒤로 이동합니다.
  • Ctrl-l 화면을 지우고 맨 위에 현재 줄을 다시 인쇄하십시오.

죽이고 잡아 당기기

  • Ctrl-k 현재 커서 위치에서 줄 끝까지 텍스트를 종료합니다.
  • Md 커서에서 현재 단어의 끝까지 또는 단어 사이에있는 경우 다음 단어의 끝까지 죽입니다. 단어 경계는 Mf에서 사용하는 것과 동일합니다.
  • M- [DEL] 커서에서 현재 단어의 시작 또는 단어 사이에있는 경우 이전 단어의 시작으로 죽입니다. 단어 경계는 Mb에서 사용하는 것과 동일합니다.
  • Ctrl-w 커서에서 이전 공백으로 죽입니다. 단어 경계가 다르기 때문에 이것은 M-과 다릅니다.
  • Ctrl-y Yank 가장 최근에 종료 된 텍스트를 커서의 버퍼에 다시 넣습니다.
  • My 킬링을 회전시키고 새로운 상단을 잡아 당깁니다. 이전 명령이 Cy 또는 My 인 경우에만이를 수행 할 수 있습니다.

M은 메타 키입니다. Max OS X 터미널의 경우 설정 / 키보드에서 "옵션을 메타 키로 사용"을 활성화 할 수 있습니다. 리눅스의 경우 더 복잡합니다.

최신 정보

또한 Readline은 두 가지 모드로 작동 할 수 있습니다.

Bash를 vi 모드를 사용하도록 전환하려면 :

$ set -o vi

나는 텍스트 편집에 vim을 사용하기 때문에 vi 모드를 선호합니다.

보너스

macOS 터미널 앱 (및 iTerm에서도)에서 Option- 클릭하여 커서를 이동할 수 있습니다 (커서가 클릭 한 위치로 이동합니다). 이것은 심지어 내부에서도 작동합니다 vim.


3
이 답변은 bash 키보드 입력이 작동하는 방식 (예 : Readline) [본질 / 루트 / 이유 뒤에]이 낮아지기 때문에이 대답을 선호합니다.
— eugenevd

6
표준 Ubuntu 터미널에서 메뉴 액세스 키보드 단축키를 비활성화하지 않으면 Meta (M)는 Alt + Shift입니다.
— brianpeiris

2
Konsole의 Kde에서 메타 (M)는 대체 키입니다
— Pipo

문제는 ALT가 실행중인 프로그램 메뉴 (이 경우 터미널)에 액세스 할 수 있기 때문에 Meta가 ALT 인 경우 Meta + F가 작동하지 않는다는 것입니다. 대안이 있습니까?
— Pithikos

1
Mf는 무엇입니까? 여기서 제어를 사용하지 않으므로 무엇입니까?
— PositiveGuy

33

Option 키를 누른 상태에서 커서를 이동할 위치를 클릭하면 터미널이 커서를 정확한 지점으로 돌립니다.


2
당신은 내 효율성을 복제했습니다
— Lay González

어떤 환경에서 작동합니까? 나는 Mac OS에서만 생각 하는가?
— 압둘

점프 서버를 통해서도 원격 ssh Linux에서 작동합니다.
— John Jiang

10

나는 vi 편집 모드를 선호하는 경향이 있습니다 (WordStar 3.3의 CTRL-K, CTRL-X와 함께 키 입력이 뇌에 전혀 사용되지 않기 때문에). 명령 행 set -o vi을 사용하여 명령 행 을 활성화하고 set -o emacs되돌릴 수 있습니다.

Vi에서는 (물론 첫 줄을 얻는 것은 ESC-K) " f5;;B"(큰 따옴표 제외)입니다.

물론, 당신은 이것을 극복하기 위해 라인에 무엇이 있는지 이해해야합니다. 기본적으로

f5 to find the first occurrence of "5" (in --option5).
;  to find the next one (in --option15).
;  to find the next one (in --option25).
B  to back up to the start of the word.

emacs 애호가들이 5 번 미만의 키 스트로크보다 더 나은 해결책을 찾을 수 있는지 봅시다 (종교 전쟁을 시작하고 싶지는 않지만).

이 끔찍한 긴 명령을 스크립트에 넣을 것인지에 대해 생각해 보셨습니까? :-)

실제로, 나는 " 3f5B"의 세 번째 어커런스를 찾아서 단어의 시작 부분으로 돌아 가기 위해 " " 보다 더 나아갈 수 있습니다 .


스크립트가 필요하지 않습니다. vi 모드에서 "v"를 누르고 편집기에서 명령 행을여십시오. 줄 바꿈으로 명령 줄, err, "script"를 더 멋지게 포맷 할 수 있으며 임시 파일이 필요하지 않습니다. :) 따라서 "v / 25"는 4 글자로 표시됩니다.
— dannysauer 2009

그러나이를 실행하려면 <Enter> 키 이상이 필요합니다. @dannysauer
— CDR

9

한 단어 씩 앞뒤로 이동하려면 Meta-b / Meta-f를 사용하십시오.

OSX에서 Meta는 ESC로 변환됩니다.

그러나 또는 터미널 환경 설정-> 설정-> 프로필-> 키보드를 열고 "옵션을 메타 키로 사용"을 확인할 수 있습니다


8

명령을 한 번 실행 한 후 다음을 실행하십시오. fc

그것은 시작됩니다 $EDITOR당신은 명령을 수정 일반 편집기를 사용하여, 이전 명령과 함께. 저장하고 종료하면 파일이 실행됩니다.

.. 그러나 Pax가 말했듯이-명령 줄은 터무니없이 긴 줄을 편집하는 데 특히 좋지 않습니다. 명령을 스크립트로 만드십시오.


4

특정 단어 수만큼 앞으로 이동하려면 M-<n>( M-Meta의 경우 일반적으로 이스케이프 키)를 누른 다음 숫자를 누르십시오. 그러면 readline에 반복 인수가 전송되므로 원하는 명령을 반복 할 수 있습니다. 계속 진행 M-<n> M-f하려면 커서 를 누르고 <n>단어 수가 앞으로 이동합니다 .

예 :

 $|echo "two three four five six seven"
 $ M-4
 (arg: 4) echo "two three four five six seven"
 $ M-f
 $ echo "two three four| five six seven"

예를 들어 커서의 줄 시작 부분에서 커서를 치면 M-26 M-f커서가 --option25|줄 끝 에서 또는 M-26 M-b커서가--|option25


2

증분 기록 검색

터미널에 다음을 입력하십시오.

gedit  ~/.inputrc

그런 다음 붙여 넣기를 복사하여 저장

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

이전 명령을 찾으려면 처음 두세 글자를 입력하고 위쪽 화살표를 사용하면 내가 원하는 말을 빨리 찾을 수 있습니다.

for f in *.mid ; do timidity "$f"; done

내가해야 할 일은 들어간다

fo

위쪽 화살표를 누르면 곧 나타납니다.


1

하나의 옵션은에서 사용하는 것 M-x shell입니다 emacs. 즉 모든 편집 시설과 키 입력을 제공합니다 emacs, 그래서 한 C-s텍스트를 검색 할 수 있습니다 option25예 :.

(그러나 누군가가 좋은 검색 및 편집 기능을 제공 할 수 있다면 대신 실제 터미널 쉘에있는 것을 선호합니다.)


0

마우스 사용

때로는 명령 줄을 편집하는 가장 쉬운 방법은 마우스를 사용하는 것입니다. 일부 이전 답변은 $ EDITOR에서 현재 줄을 여는 명령을 제공합니다. 나에게 (grml 구성의 zhs) 그 조합은 Alt+e입니다. 편집기에서 마우스를 활성화하면 마우스를 사용할 수 있습니다.

Vim에서 마우스를 활성화하려면 ~ / .vimrc에 추가하십시오.

set mouse=a
set ttymouse=xterm2

그런 다음 마우스 클릭을 vim으로 전달하는 대신 터미널에서 텍스트를 선택하려면 Shift 키를 누른 상태에서 클릭하십시오. 이것은 물론 터미널마다 다릅니다.

Sysadmin은 마우스를 두려워해서는 안됩니다.


0

Cygwin에서는 창을 마우스 오른쪽 버튼으로 클릭하여 해당 기능을 활성화 할 수 있습니다. 팝업 창에서 옵션 ...- > 마우스-> 활성화 장소 명령 행 커서 클릭 -> 적용을 선택하십시오.

이제부터는 명령 줄 내의 특정 위치에서 마우스 왼쪽 버튼을 클릭하면 커서가 해당 위치에 배치됩니다.


0

첫 번째 : EDITOR = 'nano -m'내보내기

그런 다음 : CTRL + X CTRL + E 순서대로.

현재 라인은 마우스 활성화와 함께 나노 편집기에서 열립니다. 텍스트의 아무 부분이나 클릭하고 편집 할 수 있습니다

Ctrl + X를 눌러 종료하고 y를 눌러 저장을 확인하십시오.


0

마우스 클릭시 명령 줄 커서를 이동 시키는 스크립트를 만들었습니다 .

  1. xterm 마우스 추적보고 활성화
  2. 클릭으로 생성 된 이스케이프 시퀀스를 사용하도록 리드 라인 바인딩 설정

github 에서 찾을 수 있습니다

다른 게시물 에 대한 추가 정보

echo -e "\e[?1000;1006;1015h" # Enable tracking마우스로 클릭 할 때 터미널에서 인쇄 이스케이프 시퀀스 가 작동하면 작동합니다


0

그것은 가장 빠른되지 않을 수도 있습니다,하지만 필요가 여기에 대한 몇 가지 독서 ANSI 커서의 움직임

ANSI 이스케이프 시퀀스를 사용하면 커서를 화면 주위로 자유롭게 이동할 수 있습니다. 이것은 쉘 스크립트로 생성 된 전체 화면 사용자 인터페이스에 더 유용 하지만 프롬프트에서도 사용할 수 있습니다 . 이동 이스케이프 시퀀스는 다음과 같습니다.

- Position the Cursor:
  \033[<L>;<C>H
     Or
  \033[<L>;<C>f
  puts the cursor at line L and column C.
- Move the cursor up N lines:
  \033[<N>A
- Move the cursor down N lines:
  \033[<N>B
- Move the cursor forward N columns:
  \033[<N>C
- Move the cursor backward N columns:
  \033[<N>D

- Clear the screen, move to (0,0):
  \033[2J  or \033c
- Erase to end of line:
  \033[K

- Save cursor position:
  \033[s
- Restore cursor position:
  \033[u

(...)

프롬프트에 다음 코드 줄을 입력하십시오 (입력 할 때 프롬프트가 터미널 아래에 몇 줄 아래에 있으면 프롬프트가 약간 더 명확합니다). echo -en "\033[7A\033[1;35m BASH \033[7B\033[6D"커서를 7 줄 위로 이동하고 단어 "BASH "라고 표시 한 다음 일반 프롬프트를 생성하기 시작한 곳으로 돌아갑니다.


예 :

커서를 7 행 뒤로 이동하십시오.

echo -e "\033[7A"

커서를 10 행 5 열로 이동하십시오.

echo -e "\033[10;5H"

프로그램을 채색하기 위해 색상 코드를 신속하게 에코 합니다 .

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