vimrc에 넣기 전에 테스트하려는 vimscript 두 줄이 있으면 시각적으로 선택하여 소스를 얻을 수 있습니까?
나는 시도했다
- 시각적 선택 v을 한 다음 선택 을위한 동작 등을 수행 한 다음
:'<,'>so
그러나 vim은 오류를 준다
허용되지 않는 범위
또한
:'<,'>w | so
준다
사용하다 ! 부분 버퍼 쓰기
시각적으로 선택된 vimscript를 어떻게 소싱 할 수 있습니까?
vimrc에 넣기 전에 테스트하려는 vimscript 두 줄이 있으면 시각적으로 선택하여 소스를 얻을 수 있습니까?
나는 시도했다
:'<,'>so
그러나 vim은 오류를 준다
허용되지 않는 범위
또한
:'<,'>w | so
준다
사용하다 ! 부분 버퍼 쓰기
시각적으로 선택된 vimscript를 어떻게 소싱 할 수 있습니까?
답변:
명령 행에서 <C-u>
다음을 입력 @*
하고 입력하십시오.
<C-u>
'<,'>
일부 텍스트를 시각적으로 선택하면 자동으로 삽입 된 시각적 범위가 삭제 됩니다.
:@*
*
현재 시각적으로 선택된 것을 포함 하는 레지스터 의 내용을 실행합니다 .
선택 / 강조된 텍스트가 웹 브라우저 (firefox, chrome 등)에 있어도 작동합니다. *
레지스터를 사용하면 vim에서 직접 액세스 할 수 있습니다.
텍스트가 정력 버퍼를 선택하면, 다른 해결책은 예를 들어, 명명 된 레지스터에 복사하는 것입니다 입력하여 레지스터 ."ay
그런 다음 명령 행에 : <C-r>a
를 입력하고 입력하십시오.
Ctrl+ r는 문자로 표시되는 일종의 프롬프트를 제공합니다 "
(자세한 내용은 :h c_Ctrl-r
).
이 새 프롬프트에서 레지스터 이름을 지정하면 해당 내용이 명령 행에 삽입되어 실행 전에 편집 할 수 있습니다.
레지스터를 지정하지 않고 일부 텍스트를 복사하면 명명되지 않은 레지스터 " 에서 액세스 할 수 있습니다 .
따라서 파일에 vimscript 줄이 있고 빠르게 소스를 원한다고 가정하고를 사용하여 복사 Y
한 다음 명령 줄에서 :를 사용 :<C-r>"
하여 입력하십시오.
마지막으로이 마지막 솔루션을 사용하면 알아야 할 문제가 있습니다.
이와 같이 명령 행에 이상한 문자가 표시 되면 캐리지 리턴 ^M
의 캐럿 표기 입니다. 삭제해야합니다. 그렇지 않으면 오류가 발생합니다.
요약하면,
Y
:
<C-r>
프롬프트 레지스터를 입력"
명명되지 않은 레지스터를 호출하는 유형^M
문자를: <C-r>a
그것을 사용 하는 것에 대한 당신의 제안 을 실제로 시도했지만 실제로는 잘 작동했습니다 :) vim이 ^M
줄을 리턴으로 읽은 것을 생각 합니다.
내 다른 대답보다 질문에 더 직접적으로, 다음과 같이 매핑을 정의 할 수 있습니다 ( nnoremap
선택하지 않으면 현재 줄을 실행하십시오. vnoremap
시각 모드가 활성화 된 경우).
nnoremap <F2> :execute getline(".")<CR>
vnoremap <F2> :<C-u>for line in getline("'<", "'>") \| execute line \| endfor<CR>
두 경우 모두 "현재 줄"은 :execute
d이므로 시각적 버전 :execute
에서는 시각적 선택을 통해 한 줄씩 차례대로 표시됩니다.
다른 답변에서 언급했듯이, 입력 <C-u>
하면 명령 줄에 나타나는 범위 사양이 삭제됩니다 :. |
그렇지 않으면의 끝으로 해석하고 있기 때문에 문자를 이스케이프 할 필요가 vnoremap
명령.
이것은 또한 탈출 체조의 일부를 제거하는 기능으로 바뀔 수 있지만 현재로서는 나에게 큰 승리는 아닙니다. 기본적으로 vnoremap은 여러 줄로 확장되고 call
[nv] 매핑 모드에 따라 범위가 있거나없는 ed입니다.
@*
. 감사합니다!