Vim과 Bash에서 Yanking - 서로 반대인가요?

Vim과 Bash에서 Yanking - 서로 반대인가요?

구글에서 검색해도 다른 곳에서는 찾을 수 없을 정도로 아주 간단한 질문이 있습니다. 비록 저에게는 매우 자연스러운 질문으로 느껴지지만, 어쩌면 제가 뭔가를 놓치고 있는 것일 수도 있습니다.

따라서 YANK라는 단어는 Bash와 Vim에서 반대의 의미를 갖는 것 같습니다.

  • Bash에서 복사 및 붙여넣기는 Kill 및 Yank입니다. 그래서 우리는 ctrl-y익숙합니다.반죽킬링에 저장된 텍스트(또는바보킬 링의 텍스트(예:당기다.
  • Vim에서 복사 및 붙여넣기는 복사 및 붙여넣기입니다. 그래서 우리는 p단순히반죽. 하지만 우리는 y텍스트를 버퍼에 복사하는 데 사용합니다.

그래서 Bash Yank에서는 복사이고 Vim Yank에서는 붙여넣기라고 생각합니다. 영어에서 Yank는 "풀"을 의미하므로 Yank를 버퍼/킬 링에서 데이터를 가져오는 것으로 생각하는 것이 더 합리적이라고 생각합니다(따라서 yank = 붙여넣기).

그러나 이에 대한 논의를 실제로 찾을 수 없기 때문에 위의 문제에 대한 매우 합리적인 설명이 있어야 한다고 생각했습니다. 누군가 내가 이것을 이해하도록 도와줄 수 있다면 나는 매우 감사할 것입니다!

감사합니다!

답변1

bash(또는 이것은 bash에서 사용하는 줄 편집 라이브러리입니다.) 1980년대 초반 이후 대부분의 다른 쉘과 마찬가지로 두 가지 인기 있는 텍스트 편집기를 기반으로 하는 readline두 가지 줄 편집 모드가 있습니다.emacsvi

Bash는 GNU 쉘이며암소 비슷한 일종의 영양emacsGNU의 스타 애플리케이션 중 하나인 기본 모드는 및 (또는 tcsh 또는 zsh의 / )을 사용하여 둘 사이를 전환 emacs할 수 있습니다 . Ksh도 있어요set -o emacsset -o vibindkey -ebindkey -vset -o gmacs작은 거위 이맥스예를 들어, 이는 Solaris의 기본 설정입니다.

그래서 의미의 차이에 더 가깝습니다바보emacs와 vi의 단어.

emacs와 vi는 모두 bash(1989)나 vim(1991) 이전인 1970년대 후반에 작성되었습니다.

당신이 보면vi1979년의 2BSD 문서:

운영자와이개체의 복사본을 이름 없는 버퍼로 가져옵니다. 버퍼 이름이 앞에 오면 "x와이, 여기서 x는 문자로 대체됩니다.a−z, 지정된 버퍼에 텍스트를 배치합니다. 그런 다음 명령을 사용하여 텍스트를 파일에 다시 넣을 수 있습니다.그리고;커서 뒤나 아래에 텍스트를 배치하고,커서 앞이나 위에 텍스트를 배치합니다.

Emacs에는 붙여넣기 버퍼가 없지만 하나 있습니다.살인 반지녹음된 텍스트를 녹음하세요.사망또는복사들어가세요. 당김은 텍스트에서 킬 링 안으로 당기는 것이 아니라 해당 킬 링에서 당기는 다른 방향으로 나타나는 것으로 보입니다.

존재하다1985년경의 GNU emacs 문서, 우리는 다음을 발견합니다:

Yanking이 삭제된 텍스트를 검색하고 있습니다. 텍스트를 이동하거나 복사하는 일반적인 방법은 텍스트를 삭제한 다음 한 번 이상 꺼내는 것입니다.

Bash에는 키 또는 키 조합에 바인딩할 수 있는 두 편집기의 위젯이 있음을 알 수 있습니다.

$ bash -c 'bind -l' | grep -i yank
vi-yank-arg
vi-yank-pop
vi-yank-to
yank
yank-last-arg
yank-nth-arg
yank-pop

( vi대부분 문서화되지 않았습니다).

기본 바인딩:

$ bash -o vi -c 'bind -pm vi' | grep yank
"_": vi-yank-arg
# vi-yank-pop (not bound)
"Y": vi-yank-to
"y": vi-yank-to
"\C-y": yank
# yank-last-arg (not bound)
# yank-nth-arg (not bound)
# yank-pop (not bound)
$ bash -o vi -c 'bind -pm vi-insert' | grep yank
# vi-yank-arg (not bound)
# vi-yank-pop (not bound)
# vi-yank-to (not bound)
"\C-y": yank
# yank-last-arg (not bound)
# yank-nth-arg (not bound)
# yank-pop (not bound)

vi 삽입 모드에서 emacs 스타일 +를 얻을 수 있는 방법을 확인하세요 Ctrl. y문서화되지 않은 vi-yank-arg바인딩 _도 emacs 스타일 용어를 사용하고 yank-last-argemacs 위젯과 유사하게 동작합니다. vi-yank-pop어떻게 해야할지 모르겠습니다 . Bash 소스 배포판의 문서 NEWS에 따르면emacs 모드 yank-pop의 vi 모드 버전, vi에는 킬 링이 없기 때문에 이것은 의미가 없습니다.

관련 정보