Y는 왜 y $ 대신 yy의 동의어입니까?


28

이에 대한 구체적인 역사적 이유가 있습니까?


배경 — (이미 질문을 이해 한 경우이 부분을 건너 뛸 수 있습니다.)

중급 / 고급 vi사용자에게 알 수 있듯이 y"yank"명령은 다음 이동 명령으로 지정된 텍스트를 얀크 (복사)합니다. * 따라서 ye단어의 끝으로 y0ks, 커서 위치에서 줄의 시작으로 ks, y_전체 현재 줄을 y$잡아 당기고 커서 위치에서 현재 줄 끝까지 잡아 당깁니다.

d(삭제) 명령 및 c(변경) 명령이 두 운동의 모든뿐만 아니라 사용할 수 있습니다.

ddd_전체 줄 의 동의어이며 현재 줄 전체를 삭제합니다. 마찬가지로, 현재 줄 cc의 동의어이며 현재 줄 c_변경 합니다 (즉, 모든 텍스트를 삭제하고 줄의 시작 부분에 삽입 모드로 전환합니다). **

"yank"명령은이 규칙을 따릅니다. yy처럼 전체 현재 줄을 잡아 당길 것 y_입니다.

또 다른 동의어 집합이 있습니다. D동의어이며 d$커서 위치에서 줄 끝까지 삭제됩니다. C은 동의어이며 c$텍스트를 커서 위치에서 줄 끝으로 변경하여 삽입 모드로 전환하여 새 텍스트를 입력합니다.

그러나 Y이며 또 다른 동의어 yyy_하고 꺼낼 것이다 전체 라인을 당신이 기대하는 것처럼 줄의 끝으로뿐만 아니라 커서에서, CD패턴.


Vim vi의 Vim 도움말에서 언급했듯이 Vim에서는 다음 과 같이 이전 버전과의 호환성을 유지하기 위해이 방법을 유지했습니다 :help Y.

"Y"가 커서에서 줄 끝까지 (보다 논리적이지만 Vi와 호환되지 않음) 작동하도록하려면 ": map Y y $"를 사용하십시오.

그래서 이것은에서 이월됩니다 vi. 벌금.

그러나 왜 명령이 처음에 그렇게 설계 되었습니까? 거기에 어떤 논리가 있었습니까?


* 구체적으로 텍스트를 레지스터 0에 배치하고 이름이없는 레지스터를 레지스터 0을 가리 킵니다.

** 내 질문과 관련이 없지만 또는의 S또 다른 동의어입니다 .ccc_


3
왜 그런지 잘 모르겠습니다 . 빌 조이에게 물어봐야 할 것입니다. 그러나 이것은 원래의 vi에서 수정 된 적이없고 모든 복제본으로 만들어져 결국 POSIX에 의해 요구 된 논리적 버그 일 수 있습니다.
Christian Brabandt

3
답을 찾으면 여기 에서도 필요합니다 . ;)
joeytwiddle

1
나는 이것이 실제적인 이유는 의심하지만 , Y가 vim-sensible로 리 맵핑되는 것에 반대하는 사람 은 C 프로그래머로서 전체 라인 얀킹보다 훨씬 줄 끝의 얀킹을 사용했다고 주장했다. 기본 매핑이 좋습니다. YMMV : 내 것이 확실합니다.
Rich

답변:


16

윌리엄 조이 (vi creator)와 마크 호튼 (Mark homton) (1979 년 이후 vi 관리자)의 "Vi를 사용한 디스플레이 편집 소개" 라는 논문을 발견했습니다 .

논문에서 기본 Y 동작은 실수가 아니라 원하는 기능이라는 것이 분명합니다. 에서 "재정렬 및 복제 텍스트"섹션 그들은이 언급 :

Try the command YP. This makes a copy of the current line 
and leaves you on this copy, which is placed before the current line. 
The command Y is a convenient abbreviation for yy. 
The command Yp will also make a copy of the current line, 
and place it after the current line. 
You can give Y a count of lines to yank, and thus duplicate 
several lines try 3YP.

나중에 명령 목록 ( pdf 버전부록 참조 )에서 Y에 대한 설명은 다음과 같습니다.

Y  Yanks a copy of the current line into the unnamed buffer, 
   to be put back by a later p or P; a very useful synonym for yy.

이렇게하면 Y가 버그가 아닌 기능이라고 확신합니다.

와 불일치에 관해서 DC- 나는 또한 논리적 인 설명이있다. 당신이 당신의 주요 욕망보다 텍스트 편집기 작성자로 생각하려고하면 새로운 텍스트를 작성하고 삭제하지 않는 것입니다. 그들은 (텍스트 편집자) 자신의 사용자가 더 많은 텍스트를 더 많이 쓰기를 원합니다 ...

그래서 문법 설탕 명령에 대한 (그리고 Y, D그리고 C그들이 가능한 한 많은 텍스트로 추가 작업을 (선택 종류의 이미 기존 기능을 복제하기 때문에 구문 설탕입니다) Y라인 전체를 복제) 또는 가능한 한 적은 텍스트로 삭제 ( DC때까지 삭제 전체 줄이 아니라 줄 끝).


좋아, 난 좋아 YP; 빠르고 타이핑하기 쉽습니다. 확신합니다. ;)
와일드 카드

8

Y첫 번째 vi 버전 (1978 년 1 월 1 일 -1.1)의 yank 명령이었습니다. 이 버전에는 yycammand 가 없습니다 . 전 2.2 (1979 년 5 월 6 일) 모두가 한 yyY. 따라서 실제로 ( predates ) yy와 동의어입니다 .YYyy


이것이 실제 답변입니다. Y다른 명령과 동일한 논리를 따르지 않습니다. 왜냐하면 나중에 약어로 다시 언급 된 것보다 오래되기 때문입니다.
mechalynx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.