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


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.