대화형 모드

대화형 모드

나는 종종 터미널을 통해 연구 실험을 실행합니다. 명령이 매우 길기 때문에 호출 매개변수를 변경해야 하는 경우가 종종 있습니다. 문제는 호출 라인이 길고 매개 변수가 예를 들어 라인 중간에 있다는 것입니다. 매개변수를 바꾸려면 매개변수가 있는 위치에 도달할 때까지 왼쪽 화살표/오른쪽 화살표를 누른 다음 문자를 삭제하고 다시 작성해야 합니다.

마우스 커서 위치를 사용하여 터미널 명령줄을 탐색하는 방법이 있습니까? 물론 행 중앙을 클릭해도 아무런 효과가 없습니다.

예:

내가 터미널에 있다고 가정해 보겠습니다.

~> runThisProgram(a, b, c, d, ..., v, w, x, y, z).

이제 매개변수 c 대신 X를 사용하여 실행하고 싶습니다. 줄 끝으로 가서 c에 도달할 때까지 왼쪽 화살표를 계속 누른 다음 삭제하고 X를 써야 합니다. (또는 대칭적으로 줄의 시작 부분으로 이동하여 c에 도달할 때까지 오른쪽 화살표를 계속 누른 다음 삭제하고 X를 씁니다.) 커서를 사용하여 "c" 위치를 가리키고 해당 위치로 이동할 수 있는 명령이 있습니까?

답변1

셸에서 한 번에 한 단어씩 이동할 수 있습니다. Alt+ B커서를 한 단어 뒤로 이동하고, Alt+ F커서를 한 단어 앞으로 이동합니다. Alt+ D커서 뒤의 단어를 삭제합니다. 단축키 조합에 대한 자세한 설명은 다음 bash을 참조하세요.수동.

답변2

원하는 것을 수행하는 방법에는 여러 가지가 있습니다.

대화형 모드

bash 및 zsh와 같은 최신(그리고 가장 인기 있는) 셸은 입력 라이브러리로 GNU readline을 사용합니다. 바라보다남자 3 독서선, 부분편집 명령. emacs와 vi의 두 가지 모드가 있습니다.

 이맥스 스타일

set -o emacs

@sebasth의 답변이 이 부분을 다루고 있습니다.

CTRL+ P(또는 UP): 마지막 명령

ALT+ B: 단어를 거꾸로

ALT+ F: 단어 앞으로

ALT+ D: 다음 단어 삭제

ALT+ backspace: 이전 단어 삭제

CTRL+ A: 줄의 시작

CTRL+ E: 줄 끝

 차원 스타일

set -o vi

I삽입 모드로 들어가고 ESC명령 모드로 들어가려면 누르십시오 . 명령 모드를 입력한 후 다음을 수행하십시오.

K:마지막 명령

B: 단어를 거꾸로

W: 앞으로 이야기

DW: 다음 단어 삭제

DB: 이전 단어 삭제

0:줄의 시작

$: 줄 끝

외부 편집기 사용

fc마지막 명령(기록에서 다른 명령을 지정할 수도 있음)은 즐겨 사용하는 편집기에 붙여넣어집니다($EDITOR 변수 참조). 이 명령은 편집기를 종료할 때 실행됩니다.

명령줄이 길어지기 시작하면 쉘의 readline 대신 실제 편집기를 사용할 수 있습니다. 보너스로 디스크에 스크립트 파일로 저장할 수 있습니다.

매개변수 1개만 수정

를 사용 ^before^after하면 문자열을 .beforeafter

예를 들어:

abitbol@localhost $ echo 1 2 3 4 5 6 7 
1 2 3 4 5 6 7

abitbol@localhost $ ^3^42
echo 1 2 42 4 5 6 7 
1 2 42 4 5 6 7

답변3

변수(텍스트 커서의 위치)를 원하는 열에 설정하는 함수를 bash사용할 수 있도록 사용하고 있는 것 같습니다 . 열을 찾는 가장 저렴한 방법은 줄의 시작 부분부터 원하는 위치까지 모든 텍스트를 마우스로 선택한 다음 이 선택 항목 읽기를 사용하는 것입니다.readlineREADLINE_POINTxsel

예를 들어, 이를 시험해 보려면 문자를 !함수에 바인딩하세요 gotocolumn.

$ bind '-x "!":gotocolumn' 
$ gotocolumn(){ local x=$(xsel);READLINE_POINT=${#x}; }

긴 줄을 불러오려면 앞에서 몇 글자를 선택한 후 !커서를 입력하고 이동하세요.


방금 텍스트 커서를 마우스 위치로 이동하는 기능이 실제로 내장되어 있음을 확인했습니다.xtermreadline-button기능이 있으며 적절한 바인딩만 필요합니다. 예를 들어 다음을 실행합니다.

xterm -xrm 'XTerm.VT100.translations:  #override\
 Mod4 <Btn1Down>: readline-button()\n'

그런 다음 입력 줄의 문자를 Meta(또는 Super) 키로 왼쪽 클릭하면 xterm은 커서가 정렬될 때까지 왼쪽 또는 오른쪽 클릭을 생성합니다.

비슷하게,UrxVTman urxvt-readline기본적으로 활성화되고 Shift와 왼쪽 클릭을 바인딩하는 내장 Perl 확장(참고자료 참조)이 있습니다 .

답변4

이것을 간단한 쉘 스크립트로 감싸고 쉘 변수를 조정하려는 매개변수로 사용하십시오.

#!/bin/sh

param_c=340

./myprogram 1 2 "$param_c" \
            4 5 6 7

관련 정보