답변:
붙여 넣기 명령은 기본적으로 "
( "이름이없는") 레지스터를 사용 합니다. 실제로 레지스터에 쓰는 명령은 이름이없는 레지스터에도 쓰므로 ks 크, 삭제 및 변경이 모두 영향을 미칩니다. 그렇기 때문에 yank-delete-paste 시퀀스는 삭제 된 텍스트 대신 삭제 된 텍스트를 붙여 넣습니다.
0
레지스터 가 여기에 도움 이 될 수 있습니다. 레지스터를 지정하지 않은 yank 명령은 yank 된 텍스트를 레지스터 0
에 추가합니다 (이외에도 "
). 삭제 또는 변경 조작의 영향을받지 않으므로 중간 삭제 또는 변경을 수행하더라도이를 사용하여 여러 줄을 붙여 넣을 수 있습니다.
yy
: 레지스터 0
와 "
둘 모두에 줄이 생겼습니다.dd
: 레지스터 "
에 삭제 된 줄이 있지만 레지스터에 0
여전히 줄이 있습니다. "0P
: 레지스터에서 원래 줄 바꿈 행을 붙여 넣습니다 0
.dd"0P
(같은 상기와)(버퍼의 마지막 라인을 교체 할 때 커서 위치 지정 방식으로 인해 "0p
대신에 사용하려고합니다 "0P
.)
이것은 처음에 king을 때 레지스터를 지정할 필요가 없다는 점을 제외하고 Bruce Ediger의 대답 과 매우 가깝습니다 . 하나를 사용하거나 필요한 경우 (예를 들어) 일부 라인을 대체하지만 더 이름이 레지스터는 매우 편리 할 수 AAA
있지만, 다른 라인 BBB
(넣어 AAA
레지스터 a
와 BBB
레지스터 b
(또는 레지스터 중 하나를 떠나 0
), 그에 따라 붙여 넣습니다 ).
또한 0
줄 단위 시각 모드 ( V
) 에서 붙여 넣어 키 입력을 저장할 수 V"0p
있습니다.
를 입력하지 않으려면 "0
매핑이 더 편리 할 수 있습니다.
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
다른 방법은 _
( "블랙홀") 레지스터 를 삭제하는 것 입니다. 삭제하면 "
레지스터가 영향을받지 않으므로 yank-delete-paste 시퀀스는 여전히 이름이 지정되지 않은 레지스터에서 yanked 텍스트를 붙여 넣을 수 있습니다.
yy
: 등록 0
및 "
둘 다 이제 줄이 생겼습니다."_dd
: 레지스터를 변경하지 않습니다. P
: 등록 된 원본 텍스트를 붙여 넣습니다 "
.다시, 당신은 매핑이 더 편리하다는 것을 알 수 있습니다 :
noremap <Leader>d "_d
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)으로 돌아가서 원하는만큼 자주 검색 할 수 있습니다. 반복해서 모으고 배치 할 줄이 두 개 이상인 "ayy
경우 첫 번째 줄, "byy
두 번째 줄, 세 번째 줄 등에 사용 "cyy
합니다. 나는 정신적 부담을 줄이기 위해 습관을 만들었다 (레시피의 일반성을 줄였다).
"ayy
다음 dd
, dd
속에있는 것을 대체하지 않습니다 a
,하지만 난 입력하면 p
그냥 사용하여 삭제 된 것을 붙여 넣습니다 dd
. 그리고 내가 "ayy
무엇을 삭제하고있는 내용으로 바꾸고 싶었다면 사용할 것 "add
입니다. 맞습니까?
:s
원하는 타이핑 양에 따라을 (를) 사용 하는 몇 가지 방법 이 있습니다. 가장 쉬운 방법은 간단한 검색 및 교체입니다.
:%s/find this line/replace with this/
는 %
전체 파일을 검색하고 모든 항목을 대체합니다.
입력이 너무 많은 경우 대상 문자열 ( yy
)을 잡아 당겨 "
(기본) 레지스터를 사용하여 다음과 Ctrl+r "같이 삽입 할 수 있습니다 .
:%s/<ctrl+r><">/replacement/
당신은 대체 문자열의 복사본이있는 경우 또는, 당신이 별도의 레지스터로 두 가지를 꺼낼 수 "ayy
및 "byy
로 꺼낼 a
및 b
레지스터 각각 (당신은 당신의 레지스터에 대한 모든 문자를 사용 할 수 있습니다). 그런 다음 Ctrl+r a및 Ctrl+r b을 사용 하여 검색 및 바꾸기 필드에 붙여 넣습니다.
Bruce를 한꺼번에하지 말고 교체하기 전에 줄을 확인하려면 c
옵션을 추가하십시오 .
:%s/find this line/replace with this/c
당신은 사용할 수 있습니다 V
당신은 비주얼 모드로 교체 할 선을 강조하고 공격 pp
이 라인을 통해 붙여 넣습니다.
이것은 하나의 키 입력 만 추가하므로 꽤 좋은 해결책처럼 보입니다.
V
p
.
나는 c
이런 종류의 일에 대해 정기적 인 검색과 함께 "change"명령을 자주 사용한다 . 관심있는 각 줄 / 텍스트의 파일을 검색 한 다음 연속 n.
명령 을 사용 n
하여 다음 .
에 마지막 변경을 반복 할 수 있습니다.
/^hello
-hello로 시작하는 줄을 찾으십시오.
c$goodbye
-줄을 작별 인사로 변경하십시오.
n.
-찾기 반복, 변경 반복
행을 파일에 이미있는 행으로 변경하려면 GUI를 허용한다고 가정하여 입력 버퍼에 복사 한 다음 붙여 넣기하여 첫 번째 변경 명령의 내용을 가져올 수 있습니다.
모든 일 vi와 마찬가지로, 어떤 종류의 편집을 원하는지에 따라 주머니에 많은 옵션을 갖는 것이 좋습니다.
yy
(교체 할 줄로 이동)을 사용하십시오S<C-r>0<Esc>
..
명령 으로 반복 할 수 있다는 장점이 있습니다.