Emacs처럼 Bash에서 태그를 복사하고 설정하시겠습니까?

Emacs처럼 Bash에서 태그를 복사하고 설정하시겠습니까?

Emacs가 기본적으로 사용하는 것과 동일한 키보드 바인딩을 사용하여 Bash의 명령줄에서 텍스트를 복사하고 붙여넣을 수 있기를 바랍니다(예: 텍스트를 복사 하는 데 C-space사용 , 텍스트를 붙여넣는 데 사용 등).set-markM-wC-yM-y

이것GNU 배쉬 문서Bash에는 몇 가지 기본 키 바인딩이 제공됩니다.

예를 들어 C-y내 터미널에서는 기본적으로 잡아당기기( )를 사용합니다. 그러나 set-mark및 명령이 작동하도록 할 수 없으며 copy기본적으로 어떤 키에도 바인딩되지 않는 것 같습니다.

일반적으로 사용자가 자신의 키 바인딩을 정의하는 방법은 에 추가하는 것입니다 .inputrc. 그래서 저는 문서를 살펴보고 제가 원했던 Emacs와 유사한 동작(예: set-markwith C-spacecopywith M-w)을 정의하는 데 도움이 될 수 있다고 생각한 다음 bash 함수를 찾았습니다.

copy-region-as-kill ()

즉시 꺼낼 수 있도록 이 영역의 텍스트를 종료 버퍼에 복사합니다. 기본적으로 이 명령은 바인딩되지 않습니다.

그리고

set-mark (C-@)

마커를 해당 지점에 설정합니다. 숫자 인수가 제공되면 마커가 해당 위치로 설정됩니다.

내가 올바르게 이해한다면 위의 의미는 copy-region-as-kill기본적으로 어떤 키보드 시퀀스에도 바인딩되지 않지만 기본적으로 set-mark모든 키보드 시퀀스에 바인딩된다는 것입니다.C-@

터미널에서 시도 했지만 커서를 움직일 때 강조 표시된 텍스트가 표시되지 않기 때문에 C-@작동하지 않는 것 같습니다 . 어쨌든, 위의 함수 에 키 바인딩( 및 )을 set-mark추가한 다음 다시 로드를 사용해 보았지만 작동하지 않았습니다. 다른 사용자 정의 키 바인딩이 정의되어 있기 때문에 다른 항목이 작동하고 있다는 것을 알고 있습니다.M-wC-copy-region-as-killset-mark.inputrcC-x C-r.inputrc

내가 뭐 잘못 했어요? 내가 뭐 놓친 거 없니?

답변1

선택 항목을 강조하지는 않지만 그 외에는 꽤 잘 작동한다고 생각합니다.

달리기를 해보세요

$ bind -p | grep copy-region-as-kill

이것이 실제로 작동하는지 확인하십시오 C-x C-r.

다음과 같이 말해야 합니다:

"\ew": copy-region-as-kill

그 후에는 제대로 작동합니다.

예:

$ abc<C-Spc><C-a><M-w> def <C-y>

나에게주세요

$ abc def abc

어디에 있는지 알고 싶으면 mark이렇게 하세요 C-x C-x.

예:

$ <C-Spc>abc<C-x><C-x>

커서를 표시를 설정한 위치(줄의 시작 부분)로 다시 이동합니다.

또한 바인딩을 추가할 필요는 없다고 생각합니다 set-mark. 나는 아니에요.

$ bind -p | grep set-mark
"\C-@": set-mark
"\e ": set-mark
# vi-set-mark (not bound)

(대부분의 터미널은 C-@언론에 전송합니다. 귀하의 터미널도 마찬가지라고 가정합니다.)C-Spc

다른 모든 방법이 실패하는 경우:

  • Ctrl+동일한 터미널에서 작동할 수 있나요 Space?emacs -nw
  • 다른 Alt/ Meta단축키가 bash에서 작동합니까?

답변2

나도 Cw를 묶었어킬 존. 이것은 내 .inputrc입니다.

# See http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00033.html
set bind-tty-special-chars off

# Define my favorite Emacs key bindings.
"\C-@": set-mark
"\e ": set-mark
"\C-w": kill-region
"\ew": copy-region-as-kill
"\e/": dabbrev-expand

관련 정보