셸 (적어도 내가 아는 것)에는 실제로 명령 편집 기능 이 잘못되었습니다.
예를 들면 다음과 같습니다.
- 커서를 명령의 어떤 지점으로도 가리킬 수 없습니다.
- 명령에서 텍스트를 선택하고 백 스페이스 / 삭제 / 대체 할 수 없습니다.
현재 이들은 매우 산만합니다 .gedit을 사용하여 명령을 터미널에 붙여 넣기 전에 편집합니다.
이것에 좋은 해결책이 있습니까?
셸 (적어도 내가 아는 것)에는 실제로 명령 편집 기능 이 잘못되었습니다.
예를 들면 다음과 같습니다.
현재 이들은 매우 산만합니다 .gedit을 사용하여 명령을 터미널에 붙여 넣기 전에 편집합니다.
이것에 좋은 해결책이 있습니까?
답변:
배쉬는 실제로 이것에 상당히 능숙합니다. 바로 가기 만 배우면됩니다. 예를 들어 (기본 이맥스 모드에서) :
그리고 더 많은 것이 있습니다. man readline
사용 가능한 다른 항목을 읽으십시오 . 에 바로 가기를 배치하여 다른 바로 가기를 할당 할 수 있습니다 ~/.inputrc
. 예를 들어, Ctrl+ Left한 단어 뒤로 이동하고 Ctrl+ Right한 단어 앞으로 이동하려면 다음을 추가하십시오 ~/.inputrc
.
"\e[1;5D": backward-word
"\e[1;5C": forward-word
이상한 코드의 의미를 알아 보려면 Ctrl+ V를 누른 다음 사용하려는 키를 누르십시오. Ctrl+로 시도 Right하면이 나타납니다 ^[[1;5C
. 교체 ^[
로 \e
에서 ~/.inputrc
.
다른 쉘을 살펴볼 수도 있습니다. 인기있는 "현대"기능이 풍부한 쉘에는 다음이 포함됩니다.
gnome-terminal
당신은 사용에이 ESC
버튼을 대신 ALT
앞뒤로 탐색 한 단어로. . .. 또는 응용 프로그램 메뉴에 Alt를 사용하지 않는 터미널로 전환하십시오. . . xterm 또는 사쿠라처럼
당신은 설정하여 선택의 편집기에 빈 또는 부분적으로 입력 한 명령을 편집 할 수 있습니다 EDITOR
당신의 선택의 편집기에 타격에 의해 CTRL+ X+ E나 CTRL+ X/ CTRL+ E, 현재 편집중인 라인을 열 수있는 EDITOR
,
예를 들어, 설정 EDITOR
을하는 gedit
것 CTRL+ X+ E과 CTRL+ X/ CTRL+ E의 gedit에서 현재 줄을 엽니 다.
이것을 영구적 인 해결책으로 만들기 위해 EDITOR
에서 설정할 수 있습니다 ~/.bashrc
.
이를 통해 완전한 그래픽 그래픽 편집기를 사용하여 명령을 편집 할 수 있습니다. 편집 한 명령을 실행하려면 문서를 저장하고 닫으면됩니다.
Zsh에서 다음을 추가하여 동일한 기능을 사용할 수 있습니다 ~/.zshrc
.
autoload -U edit-command-line
zle -N edit-command-line
bindkey '^xe' edit-command-line
bindkey '^x^e' edit-command-line
fc
FCEDIT 변수가 설정된 경우 명령을 사용하여 호출 할 수도 있습니다 . 좋은 대답입니다!
fc
엽니 다 (특정 방법으로 더 깔끔합니다). 나는 그것에 대해 몰랐습니다, 감사합니다!
터미널 에는 텍스트 편집 기능이 없습니다. 터미널은 텍스트 영역을 제공하고 키보드를 무언가에 연결합니다. 하지만 뭔가 당신이 터미널 내에서 실행하는 것이 그것이 무엇을 할 수 있는지를 결정합니다.
쉘 과 같은 쉘bash
은 일반적으로 터미널 내부에서 실행되는 첫 번째 항목입니다. 쉘은 명령을 기반으로 작동하기 때문에 현재 명령 만 편집 할 수 있습니다. bash 는 Bourne 쉘에 비해 뛰어난 명령 편집 기능을 제공 csh
하거나 ksh
짧은 이야기조차 편집하고 싶지는 않습니다.
텍스트 편집기 는 셸에서 호출 할 수있는 명령 중 하나입니다. 주요 예는 vim 과 emacs 입니다. vim
또는 emacs
거의 모든 것을 편집 할 수 있습니다. 두 가지 모두 내장 된 프로그래밍 환경을 포함하여 사용자가 직면 한 문제로 능력을 확장 할 수 있습니다.
따라서 해결책은 이러한 도구가 수행하는 작업을 더 잘 이해 하고 작업에 적합한 도구를 선택 하는 것 입니다.
일반적으로 터미널은 마우스로 텍스트를 선택할 수 있지만 쉘은이를 인식하지 못합니다. 그래서 불행히도도 bash
, zsh
, fish
도 es
마우스 기반 편집을 지원할 수 있습니다. 그렇게하려면 터미널을보다 강력하게 제어해야합니다.
그러나 (이것은 이다 당신은 빔 또는 GVIM을 열고 사용하는 쉘 명령을 입력 할 경우 약간의 신축성은) :
:!...
그런 다음 마우스를 클릭하여 줄의 아무 곳으로나 이동할 수 있습니다 . (이 기능이 :set mouse=a
활성화되어 있지 않으면 먼저 해야합니다 .)이 모드의 편집 키는:help cmdline-editing
Vim은 또한 매우 강력한 명령 히스토리 모드를 가지고 있습니다 q:. 여기에서 Vim의 일반 모드 명령을 사용하여 잡아 당기고 삭제하고 붙여 넣을 수 있습니다. 이 모드에서는 마우스로 선택하여 원하는 기능 을 삭제할 수 있습니다 (을 누름 d).
여기서 중요한 경고는 Vim이 실제로 라이브 셸 세션을 계속 실행하지 않는다는 것입니다. 실행하는 각 명령은 하위 프로세스에서 실행됩니다. 따라서 하위 프로세스에서 환경 변수 또는 쉘 옵션을 변경하면 손실됩니다.
즉, Vim 프로세스 내 에서 환경 변수를 수정 하고 Vim의 명령 줄에서 환경 변수를 사용할 수 있으며 자식 프로세스로 내보낼 수도 있습니다.
:let $FOO="bar" " the $ and the quotes are mandatory here
:echo $FOO " Vim's own echo command
bar
:!echo "$FOO" " Passing the variable to a shell command
bar
:!bash " Opening a child shell
$ echo "$FOO"
bar
따라서 Vim이 실제로 어떤 종류의 이상한 껍질 인 것처럼 가장하고 싶다면 고급 편집 기능을 사용할 수 있습니다! 아마도 가장 큰 단점은 입력하여 모든 명령을 시작해야한다는 것입니다 중 하나 :!
또는q:
어쨌든 쉘 명령의 출력을 현재 Vim 버퍼로 가져 오려면 다음과 같이 할 수 있습니다 (그러나 현재 행을 방해합니다).
:,!ls