답변:
예. 히트 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에서도 잘 작동한다고 생각합니다.
:!rm -rf /<cr>
이면 실행합니다. 대신 레지스터를 사용하십시오!
shift-ins
이 더 쉽다고 생각하지 ctrl-R+*
않습니까? 당신이 gvim에 있다면 이것은 물론입니다. 다른 컴퓨터에 연결된 터미널에 있고 클립 보드에서 붙여 넣기를 원하는 경우보다 더 나은 것을 알고 shift-ins
있습니까? 그 상황에서는 레지스터가 작동하지 않기 때문입니다. 의견을 제시하기 전에 생각하고 다른 행동 (예 : 다운 투팅)을하십시오.
"양념 된 텍스트를 Vim 명령 줄에 붙여넣고 싶습니다."
가장 많이 투표 된 답변은 매우 완전하지만 명령 기록 편집을 선호합니다.
일반 모드에서 다음을 입력하십시오 q:
.. 일반 vim 명령으로 편집 및 검색 할 수있는 최근 명령 목록이 표시됩니다. 맨 아래에 빈 명령 줄이 시작됩니다.
기사는 다음 텍스트를 명령 줄로 빠지게 라인 (또는 꼴은 아무것도)을 붙여, 요청 꺼낼 것을 정확한 우선 : q:p
(새 명령으로 빠지게 텍스트 UT 다음 (P) 명령 기록 편집 모드로 얻고, 원하는대로 편집 enter하여 실행합니다.
명령 히스토리 모드에서 벗어나려면 반대입니다. 명령 기록의 일반 모드에서 다음을 입력하십시오. :q
+enter
시스템 클립 보드의 내용을 Vim 명령 행에 붙여 넣으려면 ( "명령 모드") Ctrl+ R다음에를 사용하십시오 +. 나에게 적어도 우분투에서는 Shift+ Ins가 작동하지 않습니다.
추신 : 왜 Ctrl+가 R뒤에 오는지 잘 모르겠습니다 *. 이는 이론적으로 Ctrl+ R뒤에 오는 +것이 항상 작동하지 않는 것 같습니다. 나는 +버전을 검색하고 발견 했으며 적어도 내 상자에서 항상 작동하는 것 같습니다.
비슷한 문제가 발생했습니다. 선택한 텍스트가 명령으로 끝나기를 원했지만 붙여 넣는 것에 의존하지 않았습니다. 다음은 매핑을 작성하려는 명령입니다.
:call VimuxRunCommand("python")
이 플러그인의 문서는 문자열 리터럴 만 사용하여 표시됩니다. 큰 따옴표가 포함 된 텍스트를 선택하려고하면 다음이 중단됩니다.
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
이 문제를 해결하려면 @
다음을 사용하여 매크로의 내용을 참조하십시오 .
vnoremap y:call VimuxRunCommand(@")<cr>
명명되지 않은 레지스터의 내용을 전달하고 큰 따옴표 및 여러 줄로 된 대소 문자와 함께 작동합니다.
@
문자를 vimux 명령으로 보냅니다 . @
다음 큰 따옴표를 이스케이프 처리하는 것으로 생각 하고 일반 문자 대신 레지스터로 취급됩니다. vnoremap
I 정의한은 그렇게 선택된 텍스트를 양키하고 인접한 창에서 실행하는 인터프리터를 보내는 vimux 명령으로 붙여 넣 비주얼 모드에서 활성이다. 스크립트 작업과 몇 번의 키 입력으로 스크립트의 작은 부분을 테스트하는 데 정말 좋습니다.
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
시스템 전체에 붙여 넣을 수 있습니다.
상황에 따라이 정보는 기본 옵션이있는 Linux Mint의 기본 플러그인, 플러그인 없음, .vimrc Vim 7.4 동작이 아닙니다.
당신은 항상 마우스로 텍스트 (또는 사용하여 선택할 수 있습니다 V또는 v하고 "* 레지스터의 선택을 배치)을하고, 명령 행에 붙여 넣습니다 Shift+ Ctrl+v 있습니다.
명령 행에 Ctrl+ r를 입력 하면 레지스터 이름을 묻는 메시지가 나타납니다. 입력 :CTRL-r*하면 컨텐츠 레지스터 *가 명령 행에 배치됩니다. "*뿐만 아니라 모든 레지스터를 붙여 넣습니다. 참조 :help c_CTRL-R
.
또한 마우스 가운데 버튼은 명령 줄에 붙여 넣습니다.
:help->quote-plus
X Window가 선택을 처리하는 방법에 대한 설명을 참조하십시오 . 평범한 즉시 사용 가능한 Vim (다시 말해 Linux Mint의 Vim 7.4에서도)에서 마우스 왼쪽 버튼으로 선택한 내용을 마우스 가운데 버튼으로 명령 줄에 붙여 넣을 수 있습니다.
또한 마우스 가운데 버튼은 Vim에서 선택한 텍스트를 다른 많은 X Window 응용 프로그램, 심지어 GUI 응용 프로그램 (예 : Firefox 및 Thunderbird) 에도 붙여 넣습니다. )에도 붙여넣고 다른 응용 프로그램에서 텍스트를 선택한 경우 명령 줄에 텍스트 붙여 넣기도 가능합니다 .
addl 정보는 : help-> x11-selection을 참조하십시오.
tl; dr
: CTRL-r 접근 방식을 먼저 시도한 다음 다른 것이 필요한 경우 Shift+ Ctrl+ v또는 마우스 가운데 버튼을 사용하십시오.
혼란 스러울 수 있습니다.
"[a-z]y
: [az] 레지스터로 텍스트 복사
사용하여 :!
편집 명령으로 이동
Ctrl+ R: 등록 ID를 따라 복사 한 내용을 붙여 넣습니다.
CentOS 7에 사용되었습니다.
두 개의 다른 레지스터 (예 : register a
및 register b
) 에 두 개의 값이 묶여 있으면 변수를 설정 c
하고 작업을 수행 할 수 있습니다 .
예를 들어 어디서나 :set c = str2float(@a) + str2float(@b)
내용을 붙여 넣을 수 c
있습니다.
예를 들어 INSERT 모드 동안, CTRL + R
다음 입력 =
식 레지스터에 입력하고 바로 입력 c
등호 후 Enter 키를 누르십시오. 지금 총을 가지고 있어야 완료 a
및b
등록 되었습니다.
이 모든 것을 매크로로 기록하고 반복 할 수 있습니다!
이 str2float
함수는 float로 작업하는 경우에 사용되며 그렇지 않은 경우 대신 정수를 얻습니다.
이것이 관용인지 확실하지 않지만 행에 2 개의 숫자를 추가하고 500 줄 더 반복 해야하는 경우에 효과적이었습니다.