[vim] Vim 명령 줄에 기울어 진 텍스트를 붙여 넣는 방법

Vim의 명령 줄에 얽힌 텍스트를 붙여 넣고 싶습니다. 가능합니까?



답변

예. 히트 CtrlR다음 ". k 된 문자에 리터럴 제어 문자가있는 경우 CtrlR, CtrlO,을 사용하십시오 ".

다음은 레지스터로 수행 할 수있는 작업에 대한 설명입니다. 레지스터로 할 수있는 일은 매우 특별합니다. 일단 레지스터를 사용하는 방법을 알고 나면 레지스터 없이는 살 수 없습니다.

레지스터는 기본적으로 문자열의 저장 위치입니다. Vim에는 다른 방식으로 작동하는 많은 레지스터가 있습니다.

  • 0(yank register : y일반 모드에서 레지스터를 지정하지 않고 사용할 때 , yanked 텍스트는 기본 레지스터로 이동합니다),
  • 19(당신과 같은 명령을 사용하면 이동 삭제 레지스터 c또는 d레지스터 1 무엇인지, 무엇을 삭제 한 것은 1를 등록 진행을,이 등록 간다 )
  • "(기본 레지스터, 또한 익명의 레지스터로 알려진이 곳입니다. "오면 CtrlR, "),
  • az자신의 사용 (대문자 A하기 Z위해 해당 레지스터에 추가된다).
  • _( /dev/null(Unix) 또는 NUL(Windows) 와 같은 방식으로 쓸 수 있지만 쓸 수는 있지만 버리고 읽을 때 항상 비어 있습니다.)
  • - (작은 삭제 레지스터),
  • /(당신이 텍스트를 찾을 때 검색 패턴 레지스터, 업데이트 /, ?, *또는 #예를 들어, 당신은 동적 검색 패턴을 변경하는 데에 쓸 수 있습니다)
  • :(저장 마지막 VimL을 통해 명령을 입력 Q하거나 :, 읽기 전용)
  • +*(시스템 클립 보드에 등록, 당신은 클립 보드를 설정하기 위해 그들에게 작성하고 그들로부터 클립 보드의 내용을 읽을 수 있습니다)

자세한 내용 :help registers은 참조하십시오 .

언제든지 :registers모든 레지스터의 내용을 표시하는 데 사용할 수 있습니다. 이 명령에 대한 동의어 및 shorthands은 :display, :reg:di.

삽입 또는 명령 행 모드에서 CtrlR와 레지스터 이름을 추가하면이 레지스터의 내용이 삽입됩니다. 문자 그대로 (자동 들여 쓰기, 0x08백 스페이스 와 같은 제어 문자 변환 등) 문자를 삽입하려는 경우 CtrlR, CtrlO, 레지스터 이름을 사용할 수 있습니다 . 자세한 내용은 :help i_CTRL-R다음 단락을 참조하십시오.

그러나 다음을 수행 할 수도 있습니다 (아마도 레지스터 사용을 많이 잊었을 것입니다).

  • 일반 모드에서을 누르십시오 ":p. vim에서 사용한 마지막 명령은 버퍼에 붙여 넣습니다.
    분해하자 : "다음 얀크, 삭제 또는 붙여 넣기 작업 중에 사용할 레지스터를 선택할 수있는 일반 모드 명령입니다. 그래서 ":선택 결장 레지스터 (마지막 명령을 저장). 그런 다음 p이미 알고있는 명령으로 레지스터의 내용을 붙여 넣습니다.

    cf. :help ",:help quote_:

  • VimL 파일 (예 :)을 편집하고 있으며 .vimrc현재 몇 줄을 연속으로 실행하려고 yj:@"Enter합니다.
    여기서 yj현재 줄과 다음 줄을 줄입니다 (이는 j가 선으로 동작하기 때문에이 답변의 범위를 벗어남). 기본 레지스터 (명명되지 않은 레지스터라고도 함)로 들어갑니다. 그런 다음 :@Ex 명령은 인수로 제공된 레지스터에 저장된 Ex 명령을 재생 "하며 이름없는 레지스터를 참조하는 방법입니다. 또한이 답변의 상단을 참조하십시오.

    "여기서 사용 된 (레지스터 이름)을 "이전 모드 (일반 모드 명령 )와 혼동하지 마십시오 .

    cf. :help :@:help quote_quote

  • 삽입 모드의 파일 또는 명령 줄에 CtrlR,를 사용 하여 마지막 검색 패턴을 삽입하십시오 /.

    cf. :help quote_/,help i_CTRL-R

    추론 : 검색 패턴을 유지하지만, 대안을 추가 : / CtrlR, / \|alternative.

  • 비주얼 모드에서 한 줄의 중간에 두 단어를 선택하고으로 줄을 지어 y명명되지 않은 레지스터에 있습니다. 이제 두 단어를 사용하여 현재 위치 바로 아래에 새 줄을 열려고합니다 :pu. 이 약칭입니다 :put ". 이 :put명령은 많은 Ex 명령과 마찬가지로 줄 단위로만 작동합니다.

    cf. :help :put

    당신은 또한 할 수 있습니다 : :call setreg('"', @", 'V')그때 p. setreg함수는 두번째 인자의 내용으로 초기화 (및 이름으로 변수로 레지스터를 사용하여 이름이 (a 문자열) 첫 번째 인수로 주어진 어느 레지스터를 설정 VimL의 레지스터 이름), 및 세 번째 인수에 지정된 모드로, 선 단위, 문자 단위 및 문자 단위 는 블록 단위가 아닙니다 .@xxV^V

    cf. :help setreg(). 역 기능은 getreg()getregtype()입니다.

  • 당신이 매크로를 기록하는 경우 qaq다음 :echo @a사용자가 입력 한 내용을 말할 것입니다, 그리고 @a(아마도 당신이 그 일을 알고 반복적 인 작업을 피하기 위해 매우 유용) 매크로를 재생합니다

    cf. :help q,help @

    이전 예제의 결과 : 8go클립 보드에있는 경우 클립 @+보드 내용을 매크로로 재생하여 파일의 8 바이트로 이동합니다. 실제로 이것은 거의 모든 레지스터에서 작동합니다. 마지막으로 삽입 된 문자열이 dd삽입 모드 인 경우 @.( .레지스터에 마지막으로 삽입 된 문자열이 포함되어 있기 때문에 ) 행을 삭제합니다. (이 상태 때문에 빔의 내용은 해당 레지스터,이 점에서 잘못 #, %, :.만이 작업으로 p, P, :putCtrlR).

    cf. :help @

    :@(레지스터에서 Vim 명령을 재생하는 명령)과 @( 레지스터에서 정상 모드 명령을 재생하는 일반 모드 명령 )을 혼동하지 마십시오 .

    주목할만한 예외는 @:입니다. 명령 레지스터는 초기 콜론을 포함하지 않으며 최종 캐리지 리턴도 포함하지 않습니다. 그러나 일반 모드에서는 @:레지스터를 일반 모드에서 재생하지 않고 Ex 명령으로 해석하여 예상 한대로 수행합니다. 따라서 마지막 명령이 :e인 경우 레지스터 는 파일을 포함 e하지만 @:파일을 다시로드 하지만 단어의 끝으로 이동하지는 않습니다.

    cf. :help @:

  • 실행하기 전에 일반 모드에서 수행 할 작업을 표시하십시오 @='dd' Enter. =키 를 누르 자마자 Vim은 표현식 평가로 전환합니다. 표현식을 입력 Enter하고을 누르면 Vim이이를 계산하고 결과는 레지스터 내용으로 작동합니다. 물론 레지스터 =는 읽기 전용이며 원샷입니다. 사용하기 시작할 때마다 새 표현식을 입력해야합니다.

    cf. :help quote_=

    Corollary : 명령을 편집 할 때 현재 버퍼의 일부 행을 명령 행에 삽입해야한다는 것을 알고 있다면 Esc!를 누르지 마십시오 . Ctrl-를 사용하십시오 R =getline(58) Enter. 그런 다음 명령 행 편집으로 돌아가지만 58 행의 내용이 삽입되었습니다.

  • 검색 패턴을 수동으로 정의하십시오. :let @/ = 'foo'

    cf. :help :let

    그렇게 /하면 패턴에서 벗어날 필요가 없습니다 . 그러나 모든 작은 따옴표를 두 배로 늘려야합니다.

  • 모두와 함께 시작하는 라인을 복사 한 foo후, 및 포함하는 모든 라인을 bar클립 보드 체인에이 명령을 : qaq(리셋 그 안에 빈 매크로를 저장하는 레지스터), , , .:g/^foo/y A:g/bar/y A:let @+ = @a

    대문자 레지스터 이름을 사용하면 레지스터가 추가 모드에서 작동합니다.

    더 나은 방법 Q으로을 다시 매핑하지 않은 경우을 사용하여 mswin.vimEx 모드를 시작하고 Q실제로 “Ex 명령”이라고하는 “콜론 명령”을 연결 한 다음을 입력하여 일반 모드로 돌아갑니다 visual.

    cf. :help :g, :help :y,:help Q

  • 파일을 두 번 공백으로 :g/^/put _만듭니다. 이것은 블랙홀 레지스터의 내용을 /dev/null(모든 줄이 시작하기 때문에) 각 줄 다음에 줄 단위로 읽습니다 (읽을 때 비어 있지만 쓰기 가능한 것처럼 동작합니다 ).

  • foo각 줄 앞에 포함 된 줄을 추가하십시오 :g/^/-put ='foo'. 이것은 표현식 레지스터를 영리하게 사용합니다. 여기, (cf. ) -의 동의어입니다 . 때문에 선 후 풋 텍스트를 명시 적으로 이전에 따라 행동하도록 지시해야합니다..-1:help :range:put

  • 전체 버퍼를 시스템 클립 보드에 복사하십시오 :%y+.

    cf. :help :range( %부분) 및 :help :y.

  • 매크로를 misrecorded 한 경우에는 입력 할 수 있습니다 :let @a=' CtrlR =replace(@a,"'","''",'g') Enter '편집 그것. 그러면 register에 저장된 매크로의 내용이 수정되며 a식 레지스터를 사용하여이를 수행하는 방법이 여기에 표시됩니다.

  • 당신이 한 경우 dddd, 당신이 할 수있는 uu취소하기 위해. 함께 p하면 마지막으로 삭제 라인을 얻을 수 있습니다. 그러나 실제로 레지스터를 @1통해 최대 9 개의 삭제를 복구 할 수도 있습니다 @9.

    더 나은, 당신이 할 경우 "1P, 다음 .일반 모드로 재생됩니다 "2P, 등등.

    cf. :help .:help quote_number

  • 삽입 모드에서 현재 날짜를 삽입하려는 경우 : CtrlR=strftime('%y%m%d')Enter.

    cf. :help strftime()

다시 한 번 혼란 스러울 수있는 것은 다음과 같습니다.

  • :@ 레지스터의 내용을 vimscript로 해석하여 소싱하는 명령 줄 명령입니다.
  • @ 일반 모드 명령에서 레지스터의 내용을 일반 모드 키 스트로크로 해석합니다 ( :레지스터 를 사용할 때를 제외하고 초기 콜론없이 마지막으로 재생 된 명령을 포함 함).이 경우 콜론을 다시 입력 한 것처럼 명령을 재생합니다. 최종 리턴 키).

  • " 정상 모드 명령에서 yank, paste, delete, correct 등을위한 레지스터를 선택하는 데 도움이됩니다.

  • " 또한 유효한 레지스터 이름 (기본 또는 이름이없는 레지스터)이므로 레지스터 이름이 필요한 명령에 대한 인수로 전달 될 수 있습니다.

답변

시스템 클립 보드 인 것을 붙여 넣으려면 SHIFT– 만 사용하면 INS됩니다.

Windows에서는 작동하지만 Linux에서도 잘 작동한다고 생각합니다.


답변

“양념 된 텍스트를 Vim 명령 줄에 붙여넣고 싶습니다.”

가장 많이 투표 된 답변은 매우 완전하지만 명령 기록 편집을 선호합니다.

일반 모드에서 다음을 입력하십시오 q:.. 일반 vim 명령으로 편집 및 검색 할 수있는 최근 명령 목록이 표시됩니다. 맨 아래에 빈 명령 줄이 시작됩니다.

기사는 다음 텍스트를 명령 줄로 빠지게 라인 (또는 꼴은 아무것도)을 붙여, 요청 꺼낼 것을 정확한 우선 : q:p(새 명령으로 빠지게 텍스트 UT 다음 (P) 명령 기록 편집 모드로 얻고, 원하는대로 편집 enter하여 실행합니다.

명령 히스토리 모드에서 벗어나려면 반대입니다. 명령 기록의 일반 모드에서 다음을 입력하십시오. :q+enter


답변

시스템 클립 보드의 내용을 Vim 명령 행에 붙여 넣으려면 ( “명령 모드”) Ctrl+ R다음에를 사용하십시오 +. 나에게 적어도 우분투에서는 Shift+ Ins가 작동하지 않습니다.

추신 : 왜 Ctrl+가 R뒤에 오는지 잘 모르겠습니다 *. 이는 이론적으로 Ctrl+ R뒤에 오는 +것이 항상 작동하지 않는 것 같습니다. 나는 +버전을 검색하고 발견 했으며 적어도 내 상자에서 항상 작동하는 것 같습니다.


답변

yank 레지스터가 매크로 버퍼와 동일하다는 점도 주목할 가치가 있습니다. 즉, 당신은 단순히 다음 (붙여 넣은 조각 포함) 문서의 전체 명령을 쓸 수 있습니다 "by받는 사람을 꺼낼 b레지스터, 다음으로 실행 @b.


답변

비슷한 문제가 발생했습니다. 선택한 텍스트가 명령으로 끝나기를 원했지만 붙여 넣는 것에 의존하지 않았습니다. 다음은 매핑을 작성하려는 명령입니다.

:call VimuxRunCommand("python")

이 플러그인의 문서는 문자열 리터럴 만 사용하여 표시됩니다. 큰 따옴표가 포함 된 텍스트를 선택하려고하면 다음이 중단됩니다.

vnoremap y:call VimuxRunCommand("<c-r>"")<cr>

이 문제를 해결하려면 @다음을 사용하여 매크로의 내용을 참조하십시오 .

vnoremap y:call VimuxRunCommand(@")<cr>

명명되지 않은 레지스터의 내용을 전달하고 큰 따옴표 및 여러 줄로 된 대소 문자와 함께 작동합니다.


답변

OS X

Mac OS X에서 Vim을 사용하는 경우 불행히도 이전 버전과 함께 제공되며 클립 보드 옵션을 준수하지 않습니다. 다행히 Homebrew 는이 문제를 쉽게 해결할 수 있습니다.

Vim 설치 :

brew install vim --with-lua --with-override-system-vi

Vim의 GUI 버전을 설치하십시오 :

brew install macvim --with-lua --with-override-system-vi

적용하려면 터미널을 다시 시작하십시오.

다음 줄을 추가하십시오 ~/.vimrc

set clipboard=unnamed

이제 Vim에서 줄을 복사하여 yy시스템 전체에 붙여 넣을 수 있습니다.