나는 라인을 당겨 붙여넣는 데 및 를 vim
사용하고 있습니다. 그러나 파일의 여러 위치에서 한 줄을 바꾸려고 하면 클립보드/레지스터의 줄이 삭제되기 때문에 할 수 없습니다. 레지스터를 더 잘 사용하는 방법을 알아야 할 수도 있지만 현재 줄을 대체 할 수 있는 방법이 있을 것 같습니다 .yy
p
yy
p
dd
p
dd
p
답변1
기본적으로 붙여넣기 명령은 다음을 사용합니다."
("이름 없음") 등록. 실제로 레지스터에 쓰는 모든 명령은 명명되지 않은 레지스터에도 쓰기 때문에 잡아당기기, 삭제 및 변경이 영향을 미칩니다. 이것이 바로 복사-삭제-붙여넣기 순서가 복사된 텍스트 대신 삭제된 텍스트를 붙여넣는 이유입니다.
이것0
등록하다여기서 도움을 받을 수 있습니다. 레지스터를 지정하지 않는 모든 복사 명령은 복사된 텍스트를 레지스터에 배치합니다 0
( 제외 "
). 삭제 또는 변경 작업의 영향을 받지 않으므로 중간 삭제 또는 변경 작업을 수행하더라도 가져온 행을 여러 번 붙여넣는 데 사용할 수 있습니다.
yy
:등록하면0
둘"
다 이제 풀 라인을 갖게 됩니다.- 교체하려는 라인으로 이동합니다.
dd
: 이제 레지스터가"
라인을 삭제했지만 레지스터는0
여전히 라인을 가져왔습니다.
"0P
: 원래 레지스터에서 가져온 줄을 붙여 넣습니다0
.- 교체하려면 다음 줄로 이동하세요.
dd"0P
(같은 상기와)
"0p
(버퍼의 마지막 줄을 교체할 때 커서 위치 지정이 작동하는 방식으로 인해 대신 을 사용해야 합니다 "0P
.)
이건 아주 가깝다브루스 에디거의 답변단, 처음 가져올 때 레지스터를 지정할 필요가 없다는 점은 제외됩니다. 하나 이상의 명명된 레지스터를 사용하는 것은 매우 편리할 수 있지만, (예를 들어) 일부 줄을 로 바꾸고 AAA
다른 줄을 BBB
( AAA
레지스터 에 넣고 a
, BBB
레지스터에 b
넣고(또는 그 중 하나를 레지스터에 남겨두고 0
) 적절하게 붙여넣어야 하는 경우 어떻게 해야 합니까? ) .
또한 0
프로그레시브 시각적 모드( V
)로 붙여넣어 키 입력을 저장할 수도 있습니다 V"0p
.
입력하는 것을 좋아하지 않는 경우 "0
매핑이 더 편리할 수 있습니다.
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
또 다른 방법은 삭제하는 것입니다._
("블랙홀") 등록. 삭제해도 "
레지스터는 영향을 받지 않으므로 복사-삭제-붙여넣기 순서로 복사한 텍스트를 이름 없는 레지스터에 붙여넣을 수 있습니다.
yy
: 등록 후 이제0
둘"
다 유선으로 연결됩니다."_dd
: 기록에는 변화가 없습니다.
P
: 원래 레지스터에서 가져온 텍스트를 붙여넣습니다"
.
이번에도 매핑하는 것이 더 편리할 수 있습니다.
noremap <Leader>d "_d
답변2
Kevin이 좋은 대답을 한 것 같지만, 삭제하고 바꾸는 각 행에 집중하고 싶다면 약간 다른 해결책이 있습니다.
1. Find line to copy in some select number of places.
2. Put cursor on it.
3. "ayy copies that line into register 'a'.
4. Find line to replace. Put cursor on it.
5. dd deletes that line. "aP inserts the copied line above where the cursor now lies.
6. Repeat steps 4 and 5.
이 접근 방식을 사용하면 패턴 일치를 사용하여 삭제하고 바꿀 줄을 찾을 수 있으며 파일의 시작 부분(1G)으로 돌아가 필요할 때마다 앞으로 검색할 수 있습니다. 반복적으로 모아서 배치하고 싶은 라인이 2개 이상이라면 "ayy
첫 번째 라인, "byy
두 번째 라인, "cyy
세 번째 라인 등 으로 활용하겠습니다 . 나는 정신적 부담을 덜기 위해 습관(레시피의 활용도를 떨어뜨리는)을 개발했습니다.
답변3
V
시각적 모드에서 바꾸려는 선을 강조 표시하고 탭 pp
하여 선을 붙여넣을 수 있습니다 .
이렇게 하면 키 입력이 한 번만 추가되므로 꽤 좋은 솔루션인 것 같습니다.
답변4
c
이와 같은 경우에는 일반 검색과 함께 "변경" 명령을 자주 사용합니다. 관심 있는 텍스트의 모든 줄/조각에 대해 파일을 검색한 다음 순차 n.
명령을 사용할 수 있습니다( n
다음 명령의 경우 .
마지막 변경 사항에 대해 반복).
/^hello
- 안녕하세요로 시작하는 줄을 찾아보세요.
c$goodbye
- 줄을 바꾸고 작별 인사를 하세요.
n.
- 검색과 변경을 반복하세요.
해당 행을 이미 파일에 있는 행으로 변경하려면 해당 행을 입력 버퍼에 복사하고(GUI가 허용한다고 가정) 붙여넣어 첫 번째 변경 명령의 내용을 가져오면 됩니다.
vi의 모든 것과 마찬가지로, 원하는 편집 유형에 따라 주머니에 많은 옵션을 가지고 있는 것이 좋습니다.