2012-11-19 1 views
4

커서 위의 문자 나 단어를 바로 복사하여 현재 위치에 붙여 넣으라는 명령이 있습니까?위의 단어를 복사하여 Vim의 현재 커서 위치에 붙여 넣기 쉬운 방법을 찾으십시오.

예 :

sig1 : in std_logic; 
sig2 : in std_logic; 
sig3 :^

위의 상황을 고려, 내 커서가 ^ 위치에, 나는 in std_logic;를 복제 현재 위치에 붙여 넣기하고 싶습니다. 내가 잘 알고있는 방법은 다음과 같습니다.

1. Move cursor up 
2. Go into visual mode and highlight 
3. Yank 
4. Move cursor down 
5. Paste 

이렇게 쉬운 방법이 있습니까? 아니면 전체 시퀀스를 실행하는 vimrc에서 매핑을 작성하는 유일한 옵션이 남아 있습니까?

편집 :

imap <F1> @<Esc>kyWjPA<BS> 
nmap <F1> @<Esc>kyWjPA<BS> 
imap <F2> @<Esc>kvyjPA<BS> 
nmap <F2> @<Esc>kvyjPA<BS> 

을하지만 그렉의 솔루션 쉽다는 것을 보인다 나는 인터넷에 매핑을 발견!

답변

4

삽입 모드에서 이전 줄의 해당 문자 위치에서 문자를 복사하려면 Ctrl + Y을 사용할 수 있습니다. 키를 누른 상태에서 키보드 반복을 기다리면 줄 끝까지 이동할 수 있습니다.

+0

그것은 잘 작동합니다, 감사합니다! –

+0

와우 !!! 멋진 기능 이네요. – arunmoezhi

+0

Brilliant! 10 년은 Vim을 사용하고 있습니다. –

4

그렉의 대답은 내가 내 워크 플로우에 더 도움이 같은 단어 현명한 복사 내 Ctrl 키를 + Y을 수정 한에 자리이지만. 삽입 완료 메뉴 (:h ins-completion-menu 참조) 경우로 위의 줄에서

inoremap <expr> <c-y> pumvisible() ? "\<c-y>" : matchstr(getline(line('.')-1), '\%' . virtcol('.') . 'v\%(\k\+\\|.\)') 

기본적으로이 표현 매핑 복사 단어 표시되지 않은 : 나는 내 ~/.vimrc 파일에 다음 있습니다. 이 경우를 확인하면 현재 완료를 수락하고 완료 모드를 종료 할 수 있습니다 (:h complete_CTRL-Y 참조).

삽입 완료 메뉴가 보이지 않으면 그 다음이 발생합니다

  • getline(line('.')-1)가 이전 행
  • virtual('.') 현재 위치를 열 위치
  • '\%' . virtcol('.') . 'v\%(\k\+\\|.\)' 경기 커서 위치 또는에서 단어를 반환 문자
  • matchstr()은 패턴과 일치하는 이전 라인의 일치하는 부분을 반환합니다. 더 도움말을 참조하십시오

는 :

:h :map-<expr> 
:h pumvisible(
:h matchstr(
:h getline(
:h line(
:h virtcol(
:h /\%v 
:h /\k 
+0

공유해 주셔서 감사합니다! –

관련 문제