Vim의 명령 줄에 얽힌 텍스트를 붙여 넣고 싶습니다. 가능합니까?
답변
예. 히트 Ctrl– R다음 ". k 된 문자에 리터럴 제어 문자가있는 경우 Ctrl– R, Ctrl– O,을 사용하십시오 ".
다음은 레지스터로 수행 할 수있는 작업에 대한 설명입니다. 레지스터로 할 수있는 일은 매우 특별합니다. 일단 레지스터를 사용하는 방법을 알고 나면 레지스터 없이는 살 수 없습니다.
레지스터는 기본적으로 문자열의 저장 위치입니다. Vim에는 다른 방식으로 작동하는 많은 레지스터가 있습니다.
0
(yank register :y
일반 모드에서 레지스터를 지정하지 않고 사용할 때 , yanked 텍스트는 기본 레지스터로 이동합니다),1
에9
(당신과 같은 명령을 사용하면 이동 삭제 레지스터c
또는d
레지스터 1 무엇인지, 무엇을 삭제 한 것은 1를 등록 진행을,이 등록 간다 등 )"
(기본 레지스터, 또한 익명의 레지스터로 알려진이 곳입니다. "오면 Ctrl– R, "),a
에z
자신의 사용 (대문자A
하기Z
위해 해당 레지스터에 추가된다)._
(/dev/null
(Unix) 또는NUL
(Windows) 와 같은 방식으로 쓸 수 있지만 쓸 수는 있지만 버리고 읽을 때 항상 비어 있습니다.)-
(작은 삭제 레지스터),/
(당신이 텍스트를 찾을 때 검색 패턴 레지스터, 업데이트/
,?
,*
또는#
예를 들어, 당신은 동적 검색 패턴을 변경하는 데에 쓸 수 있습니다):
(저장 마지막 VimL을 통해 명령을 입력Q
하거나:
, 읽기 전용)+
및*
(시스템 클립 보드에 등록, 당신은 클립 보드를 설정하기 위해 그들에게 작성하고 그들로부터 클립 보드의 내용을 읽을 수 있습니다)
자세한 내용 :help registers
은 참조하십시오 .
언제든지 :registers
모든 레지스터의 내용을 표시하는 데 사용할 수 있습니다. 이 명령에 대한 동의어 및 shorthands은 :display
, :reg
와 :di
.
삽입 또는 명령 행 모드에서 Ctrl– R와 레지스터 이름을 추가하면이 레지스터의 내용이 삽입됩니다. 문자 그대로 (자동 들여 쓰기, 0x08
백 스페이스 와 같은 제어 문자 변환 등) 문자를 삽입하려는 경우 Ctrl– R, Ctrl– O, 레지스터 이름을 사용할 수 있습니다 . 자세한 내용은 :help i_CTRL-R
다음 단락을 참조하십시오.
그러나 다음을 수행 할 수도 있습니다 (아마도 레지스터 사용을 많이 잊었을 것입니다).
-
일반 모드에서을 누르십시오 ":p. vim에서 사용한 마지막 명령은 버퍼에 붙여 넣습니다.
분해하자 :"
다음 얀크, 삭제 또는 붙여 넣기 작업 중에 사용할 레지스터를 선택할 수있는 일반 모드 명령입니다. 그래서 ":선택 결장 레지스터 (마지막 명령을 저장). 그런 다음 p이미 알고있는 명령으로 레지스터의 내용을 붙여 넣습니다.cf.
:help "
,:help quote_:
-
VimL 파일 (예 :)을 편집하고 있으며
.vimrc
현재 몇 줄을 연속으로 실행하려고 yj:@"Enter합니다.
여기서 yj현재 줄과 다음 줄을 줄입니다 (이는 j가 선으로 동작하기 때문에이 답변의 범위를 벗어남). 기본 레지스터 (명명되지 않은 레지스터라고도 함)로 들어갑니다. 그런 다음:@
Ex 명령은 인수로 제공된 레지스터에 저장된 Ex 명령을 재생"
하며 이름없는 레지스터를 참조하는 방법입니다. 또한이 답변의 상단을 참조하십시오."
여기서 사용 된 (레지스터 이름)을"
이전 모드 (일반 모드 명령 )와 혼동하지 마십시오 .cf.
:help :@
과:help quote_quote
-
삽입 모드의 파일 또는 명령 줄에 Ctrl– R,를 사용 하여 마지막 검색 패턴을 삽입하십시오 /.
cf.
:help quote_/
,help i_CTRL-R
추론 : 검색 패턴을 유지하지만, 대안을 추가 :
/
Ctrl– R, /\|alternative
. -
비주얼 모드에서 한 줄의 중간에 두 단어를 선택하고으로 줄을 지어
y
명명되지 않은 레지스터에 있습니다. 이제 두 단어를 사용하여 현재 위치 바로 아래에 새 줄을 열려고합니다:pu
. 이 약칭입니다:put "
. 이:put
명령은 많은 Ex 명령과 마찬가지로 줄 단위로만 작동합니다.cf.
:help :put
당신은 또한 할 수 있습니다 :
:call setreg('"', @", 'V')
그때p
.setreg
함수는 두번째 인자의 내용으로 초기화 (및 이름으로 변수로 레지스터를 사용하여 이름이 (a 문자열) 첫 번째 인수로 주어진 어느 레지스터를 설정 VimL의 레지스터 이름), 및 세 번째 인수에 지정된 모드로, 선 단위, 문자 단위 및 문자 단위 는 블록 단위가 아닙니다 .@x
x
V
^V
cf.
:help setreg()
. 역 기능은getreg()
및getregtype()
입니다. -
당신이 매크로를 기록하는 경우
qa
…q
다음:echo @a
사용자가 입력 한 내용을 말할 것입니다, 그리고@a
(아마도 당신이 그 일을 알고 반복적 인 작업을 피하기 위해 매우 유용) 매크로를 재생합니다cf.
:help q
,help @
이전 예제의 결과 :
8go
클립 보드에있는 경우 클립@+
보드 내용을 매크로로 재생하여 파일의 8 바이트로 이동합니다. 실제로 이것은 거의 모든 레지스터에서 작동합니다. 마지막으로 삽입 된 문자열이dd
삽입 모드 인 경우@.
(.
레지스터에 마지막으로 삽입 된 문자열이 포함되어 있기 때문에 ) 행을 삭제합니다. (이 상태 때문에 빔의 내용은 해당 레지스터,이 점에서 잘못#
,%
,:
및.
만이 작업으로p
,P
,:put
와 Ctrl– R).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.vim
Ex 모드를 시작하고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='
Ctrl– R=replace(@a,"'","''",'g')
Enter'
편집 그것. 그러면 register에 저장된 매크로의 내용이 수정되며a
식 레지스터를 사용하여이를 수행하는 방법이 여기에 표시됩니다. -
당신이 한 경우
dddd
, 당신이 할 수있는uu
취소하기 위해. 함께p
하면 마지막으로 삭제 라인을 얻을 수 있습니다. 그러나 실제로 레지스터를@1
통해 최대 9 개의 삭제를 복구 할 수도 있습니다@9
.더 나은, 당신이 할 경우
"1P
, 다음.
일반 모드로 재생됩니다"2P
, 등등.cf.
:help .
과:help quote_number
-
삽입 모드에서 현재 날짜를 삽입하려는 경우 : Ctrl– R
=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
시스템 전체에 붙여 넣을 수 있습니다.