Linux 터미널에 명령, 특히 매우 긴 명령을 입력하고 하나 이상의 단어를 삭제하고 다른 단어로 바꾸려는 경우 터미널에서 이를 신속하게 수행할 수 있는 방법이 있습니까?
이는 Linux와는 아무런 관련이 없지만 메모장과 같은 응용 프로그램에서는 하나 이상의 단어를 선택하고 한 단계로 삭제할 수 있습니다. 하지만 제가 아는 한, 터미널에서 한 글자씩 삭제해야 하는데, 이 작업은 속도가 느릴 수 있습니다.
Vim이 이 작업을 수행할 수 있다는 것을 알고 있지만 Vim에서 여는 대신 터미널에서 직접 편집하고 싶다고 가정해 보겠습니다.
답변1
기본적으로 다음 키 바인딩을 사용하여 터미널에서 커서를 이동할 수 있습니다[1]
alt + b move one word backward
alt + f move one word forward
ctrl + b move one character forward
ctrl + f move one character forward
단어 단위로 이동하는 것이 문자 단위로 이동하는 것보다 훨씬 빠릅니다. 캐릭터가 자리를 잡으면 다음을 사용할 수 있습니다.
alt + d to delete a word in cursor position
ctrl + d delete a character in cursor position
vi 키 바인딩이 설정되어 있는 경우(감사합니다.@admstg) Bash에서는 ESC
키를 입력하여 vi 모드로 들어갈 수 있습니다. vi 키 바인딩을 사용하여 커서를 이동하는 방법은 다음과 같습니다.[2]
h move left by a character
l move right by a character
b move back by a word
w move forward by a word
dw delete word at cursor
x cut a character at cursor
u undo
r replace a character
v enter vi editor to edit the command
인용하다:
- [1]리눅스 명령줄페이지 81-83.
- [2]Bash에서 Vi 모드를 사용하는 방법.
- [삼]Bash Readline 상호 작용.
답변2
저는 개인적으로 다음 키를 더 자주 사용하는 것을 선호합니다. 나는 bash
주로 기본 설정을 사용하고 다음과 같은 몇 가지 추가 기능을 정의합니다 .inputrc
.
"\e[1;5A": previous-screen-line
"\e[1;5B": next-screen-line
CtrlUpCtrlDown커서를 명령의 이전/다음 표시 줄로 이동합니다 . 매우 긴 여러 줄 명령에 유용합니다.
"\e[1;5C": forward-word
"\e[1;5D": backward-word
CtrlLeft커서를 단어 단위 로 수평으로 이동합니다 CtrlRight.
"\e[3;5~": kill-word
"\b": backward-kill-word
CtrlDelete그리고 CtrlBackspace오른쪽/왼쪽에 있는 단어 전체를 삭제하세요. ( AltBackspace기본적으로 이 작업을 수행해야 하지만 Ctrl다른 앱 및 기타 바로가기와 일관성을 유지하는 것을 선호합니다.)
물론 Home언제나 End그렇듯이 Delete이 Backspace모든 것은 기본적으로 작동합니다.
readline
편리하다고 생각되는 다른 가능성에 대해서는 매뉴얼의 "명령 편집" 섹션을 확인하십시오 .
예를 들어, 다른 인기 있는 셸로 전환하거나 zsh
더 fish
많은(또는 단지 다른) 옵션을 제공할 수 있지만 저는 해당 옵션에 익숙하지 않으므로 살펴보고 싶을 수도 있습니다.
일부 터미널 에뮬레이터(어떤 에뮬레이터인지는 잘 모르겠습니다)에서는 마우스로 커서 위치를 지정할 수 있습니다. 다음은 다소 신뢰할 수 없는 추측입니다. 터미널은 화살표 키를 여러 번 누른 것처럼 여러 개의 Left또는 Right키(커서에 대한 클릭 지점의 상대적 위치를 기반으로)를 합성하고 애플리케이션(셸)이 다음과 같이 반응할 것이라고 가정합니다. 커서를 그곳으로 이동합니다(항상 그런 것은 아니지만 일반적으로 올바른 추측임).
답변3
일반적인 기본 emacs 키 바인딩(IE는 vi 바인딩이 아님)을 사용하는 경우 CtrlW커서부터 다음 공간 경계까지 뒤로 삭제를 사용할 수 있습니다.
이는 경로나 URL의 일부를 제거하려고 할 때 다소 공격적일 수 있으므로 AltBackspace다양한 다른 단어 경계 문자가 존중되는 경우도 있습니다.
여기에 나열할 수 없는 바인딩이 많이 있습니다.
답변4
vi
터미널에서 직접 명령을 사용할 수 있습니다 set -o vi
.