시각적으로 선택된 vimscript를 어떻게 소싱 할 수 있습니까?


12

vimrc에 넣기 전에 테스트하려는 vimscript 두 줄이 있으면 시각적으로 선택하여 소스를 얻을 수 있습니까?

나는 시도했다

  • 시각적 선택 v을 한 다음 선택 을위한 동작 등을 수행 한 다음
  • :'<,'>so

그러나 vim은 오류를 준다

허용되지 않는 범위

또한

:'<,'>w | so

준다

사용하다 ! 부분 버퍼 쓰기

시각적으로 선택된 vimscript를 어떻게 소싱 할 수 있습니까?

답변:


11

명령 행에서 <C-u>다음을 입력 @*하고 입력하십시오.

<C-u>'<,'>일부 텍스트를 시각적으로 선택하면 자동으로 삽입 된 시각적 범위가 삭제 됩니다.

:@**현재 시각적으로 선택된 것을 포함 하는 레지스터 의 내용을 실행합니다 .

선택 / 강조된 텍스트가 웹 브라우저 (firefox, chrome 등)에 있어도 작동합니다. *레지스터를 사용하면 vim에서 직접 액세스 할 수 있습니다.


텍스트가 정력 버퍼를 선택하면, 다른 해결책은 예를 들어, 명명 된 레지스터에 복사하는 것입니다 입력하여 레지스터 ."ay

그런 다음 명령 행에 : <C-r>a를 입력하고 입력하십시오.
Ctrl+ r는 문자로 표시되는 일종의 프롬프트를 제공합니다 "(자세한 내용은 :h c_Ctrl-r).
이 새 프롬프트에서 레지스터 이름을 지정하면 해당 내용이 명령 행에 삽입되어 실행 전에 편집 할 수 있습니다.


레지스터를 지정하지 않고 일부 텍스트를 복사하면 명명되지 않은 레지스터 " 에서 액세스 할 수 있습니다 .

따라서 파일에 vimscript 줄이 있고 빠르게 소스를 원한다고 가정하고를 사용하여 복사 Y한 다음 명령 줄에서 :를 사용 :<C-r>"하여 입력하십시오.

마지막으로이 마지막 솔루션을 사용하면 알아야 할 문제가 있습니다.
이와 같이 명령 행에 이상한 문자가 표시 되면 캐리지 리턴 ^M캐럿 표기 입니다. 삭제해야합니다. 그렇지 않으면 오류가 발생합니다.

요약하면,

  1. vimscript 라인을 Y
  2. 로 명령 모드로 전환 :
  3. 히트 <C-r>프롬프트 레지스터를 입력
  4. "명명되지 않은 레지스터를 호출하는 유형
  5. 삭제하는 백 스페이스를 누르 ^M문자를
  6. Enter 키를 누르십시오.

1
단! : D는 훌륭하게 작동합니다. 전례를 겪어 본 적이 없습니다 @*. 감사합니다!
the_velour_fog

도움이 되서 다행입니다. 다른 솔루션을 제안하기 위해 답변을 편집했습니다.
새 기노

1
좋은 하나, 나는 : <C-r>a 그것을 사용 하는 것에 대한 당신의 제안 을 실제로 시도했지만 실제로는 잘 작동했습니다 :) vim이 ^M줄을 리턴으로 읽은 것을 생각 합니다.
the_velour_fog

그것은 좋은 질문입니다. 솔직히 모르겠습니다. 일반적 으로이 문자를 삭제하지 않으면 오류가 발생합니다. 오류없이 당신을 위해 일하게되어 기쁩니다. 아마도 주제에 대해 더 많은 지식을 가진 사람이 vim이 그런 종류의 특수 문자를 어떻게 다루는 지 설명해 줄 것입니다.
saginaw

2

나는 실제로 그것을 조금 다르게하고, 나는 vimrc에서 편집하고 그것을 쓸 때마다 다시 출처를 지정한다. (캐스케이드 vimrc 파일 세트가 있으므로이 중 하나를 변경할 수 있습니다.)

if $MYVIMRC != ''
    autocmd BufWritePost    *vimrc      source $MYVIMRC
endif

2

내 다른 대답보다 질문에 더 직접적으로, 다음과 같이 매핑을 정의 할 수 있습니다 ( nnoremap선택하지 않으면 현재 줄을 실행하십시오. vnoremap시각 모드가 활성화 된 경우).

nnoremap <F2> :execute getline(".")<CR>
vnoremap <F2> :<C-u>for line in getline("'<", "'>") \| execute line \| endfor<CR>

두 경우 모두 "현재 줄"은 :executed이므로 시각적 버전 :execute에서는 시각적 선택을 통해 한 줄씩 차례대로 표시됩니다.

다른 답변에서 언급했듯이, 입력 <C-u>하면 명령 줄에 나타나는 범위 사양이 삭제됩니다 :. |그렇지 않으면의 끝으로 해석하고 있기 때문에 문자를 이스케이프 할 필요가 vnoremap명령.

이것은 또한 탈출 체조의 일부를 제거하는 기능으로 바뀔 수 있지만 현재로서는 나에게 큰 승리는 아닙니다. 기본적으로 vnoremap은 여러 줄로 확장되고 call[nv] 매핑 모드에 따라 범위가 있거나없는 ed입니다.


시각적 모드 매핑은 전체 줄을 실행하므로 블록 또는 문자 방식의 경우 줄 내 시작 및 끝 지점을 무시합니다.
dash-tom-bang
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.