전체 버퍼에 대한 텍스트 개체가 있습니까?


28

나는 종종 자신이 같은 명령을 입력 찾을 수 gg"+yG또는 ggdG두 번 커서를 이동하지 않고이 작업을 수행하는보다 효율적인 방법을 부탁합니다. y[movement]커서를 움직이지 않고 전체 버퍼를 복사하는 데 사용할 수있는 명령이 있습니까?

답변:


36

vim은 퍼센트 기호를 사용하여 현재 버퍼를 참조하므로이를 사용하여 모든 것을 빠르게 얻을 수 있습니다.

:%y전체 버퍼 :%y+를 잡아 당기고 +레지스터로 잡아 당깁니다 (vim이 적절한 옵션으로 컴파일 된 경우 클립 보드).

:%d:%d+삭제를 위해 동일을 할 것입니다.

이러한 각 경우에 커서는 그대로 유지됩니다.


와,이 모든 시간 동안 나는 이것을 사용 mmgg"+yG`m하고 생각하지 않았다. 고마워, 이것은 .vimrc에서 올바르게 가고 있습니다.
Doorknob

마크를 설정하고 사용하는 대신 @Doorknob을 사용하면 C-o두 번만 사용할 수 있습니다 .
Ruslan

10

또 다른 해결책은 vim-textobj-entire 라는 플러그인을 사용하는 것 입니다. 기본적으로이 플러그인은 앞뒤 빈 줄을 제외한 ae전체 버퍼에 ie대한 전체 버퍼 의 텍스트 객체 를 제공합니다 .

이 플러그인은 동일한 작성자의 vim-textobj-user 에 의존 하므로 사용자는 모든 텍스트 객체를 편안하게 정의 할 수 있습니다. 이것을 잘 활용하는 플러그인많이 있습니다 .


8

기본적으로 전체 파일에 대한 텍스트 객체는 없지만를 사용하여 만들 수 있습니다 omap. 이 경우 다음과 같이 보일 것입니다.

onoremap f :<c-u>normal! mzggVG<cr>`z

작동 방식은 다음과 같습니다.

onoremap f " make 'f' the text object name
:<c-u> " use <c-u> to prevent vim from inserting visual selection marker at the beginning of the command automatically.
normal! " use normal to make key presses ignoring any user mappings
mzggVG<cr>`z " make a marker in register z, select the entire file in visual line mode and enter the normal command, and go back to the z marker

노트:

Ctrlu명령 행 모드에서 커서 위치의 왼쪽에있는 모든 것을 삭제할 수 있습니다. 이 작업이 수행되는 이유는 비주얼 모드에서 직접 명령 행을 입력하면 명령 행에 자동으로 삽입 '<,'>되기 때문에 원하는 것이 아니기 때문입니다. 또한 일반적으로 줄에서 다음 검색 문자로 이동하는 데 사용 f되기 때문에 이외의 다른 것을 사용하는 것이 좋습니다 f. 예를 들어, 현재 줄 fi에서 다음 i으로 이동합니다 .

관련 도움말 주제 :

:help omap-info
:help :normal
:help c_CTRL-U
:help v_:

커서를 내버려 두고이 작업을 수행하는 방법이 있습니까?
Random832

@ Random832 ``끝에 a 를 추가 하면 커서가 이전 위치로 돌아갑니다.
SnoringFrog

이것이 선택을 yank 명령에 적용하지 않을까 걱정됩니다. 오늘 실험 해 볼게요.
Random832

1
매핑에 마커 명령을 추가했는데 커서를 현재 위치에 두어야합니다.
EvergreenTree

2

다음은 작업을 수행하기위한 몇 가지 빠른 매핑입니다.

nnoremap yY :%yank <c-r>=v:register<cr><cr>
nnoremap dD :%delete <c-r>=v:register<cr><cr>

이제 yYdD을 사용 하여 각각 k / 삭제할 수 있습니다. 완전한 텍스트 개체를 사용하는 것만 큼 좋지는 않지만 때로는 가장 간단한 솔루션이 가장 좋습니다.

자세한 내용은 다음을 참조하십시오.

:h :y
:h :d
:h [range]
:h v:register
:h c_ctrl-r
:h @=
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.