태그 보관물: bash

bash

더 나은 편집 기능을 갖춘 쉘 들면 다음과 같습니다.

셸 (적어도 내가 아는 것)에는 실제로 명령 편집 기능 잘못되었습니다.

예를 들면 다음과 같습니다.

  • 커서를 명령의 어떤 지점으로도 가리킬 수 없습니다.
  • 명령에서 텍스트를 선택하고 백 스페이스 / 삭제 / 대체 할 수 없습니다.

현재 이들은 매우 산만합니다 .gedit을 사용하여 명령을 터미널에 붙여 넣기 전에 편집합니다.

이것에 좋은 해결책이 있습니까?



답변

배쉬는 실제로 이것에 상당히 능숙합니다. 바로 가기 만 배우면됩니다. 예를 들어 (기본 이맥스 모드에서) :

  • Ctrl+ A: 줄의 시작 부분으로 이동합니다.
  • Ctrl+ E: 줄의 끝으로 이동합니다.
  • Ctrl+ B: 한 문자 뒤로 이동합니다.
  • Ctrl+ F: 한 문자 앞으로 이동합니다.
  • Alt+ B: 한 단어 뒤로 이동합니다.
  • Alt+ F: 한 단어 앞으로 이동합니다.
  • Ctrl+ K: 줄 끝까지 모든 것을 삭제 (잘라 내기)합니다.
  • Alt+ D: 커서 다음의 단어를 삭제 (잘라 내기)합니다.
  • Ctrl+ W: 커서 앞의 단어를 삭제 (잘라 내기)합니다.
  • Ctrl+ Y: 버퍼에있는 것 ( 예 : Ctrl+ K또는 Alt+ D로 잘라낸 것 )

그리고 더 많은 것이 있습니다. 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.


다른 쉘을 살펴볼 수도 있습니다. 인기있는 “현대”기능이 풍부한 쉘에는 다음이 포함됩니다.


답변

당신은 설정하여 선택의 편집기에 빈 또는 부분적으로 입력 한 명령을 편집 할 수 있습니다 EDITOR당신의 선택의 편집기에 타격에 의해 CTRL+ X+ ECTRL+ X/ CTRL+ E, 현재 편집중인 라인을 열 수있는 EDITOR,

예를 들어, 설정 EDITOR을하는 geditCTRL+ X+ ECTRL+ 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

답변

터미널 에는 텍스트 편집 기능이 없습니다. 터미널은 텍스트 영역을 제공하고 키보드를 무언가에 연결합니다. 하지만 뭔가 당신이 터미널 내에서 실행하는 것이 그것이 무엇을 할 수 있는지를 결정합니다.

과 같은 bash 은 일반적으로 터미널 내부에서 실행되는 첫 번째 항목입니다. 쉘은 명령을 기반으로 작동하기 때문에 현재 명령 만 편집 할 수 있습니다. 는 Bourne 쉘에 비해 뛰어난 명령 편집 기능을 제공 csh하거나 ksh짧은 이야기조차 편집하고 싶지는 않습니다.

텍스트 편집기 는 셸에서 호출 할 수있는 명령 중 하나입니다. 주요 예는 입니다. vim또는 emacs거의 모든 것을 편집 할 수 있습니다. 두 가지 모두 내장 된 프로그래밍 환경을 포함하여 사용자가 직면 한 문제로 능력을 확장 할 수 있습니다.

따라서 해결책은 이러한 도구가 수행하는 작업을 더 잘 이해 하고 작업에 적합한 도구를 선택 하는 것 입니다.


답변

일반적으로 터미널은 마우스로 텍스트를 선택할 수 있지만 쉘은이를 인식하지 못합니다. 그래서 불행히도도 bash, zsh, fishes마우스 기반 편집을 지원할 수 있습니다. 그렇게하려면 터미널을보다 강력하게 제어해야합니다.

그러나 (이것은 이다 당신은 빔 또는 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

답변