변수 내용을 vim 명령의 인수로 어떻게 사용합니까?


12

예를 들어 내가했다고 가정

:let foo=pattern

이제는 리터럴 문자열 대신 Ggrep patter변수 foo를 사용 하고 싶습니다 patter.

:echo foo

출력 pattern하지만

:Ggrep foo

그냥 foo를 찾습니다

최신 정보:

일련의 명령을 만들고 실행 : execute는 해결책이 아니며 해킹입니다. 그리고 사소한 변수 값으로 나뉩니다.


무엇 Ggrep(자본 G는?)?
akira

'fugutive'vim 플러그인의 git grep
Vitaly Kushner

예제 명령이 잘못되었습니다. foo = 'pattern'이어야합니다. : execute는 해킹이 완전히 잘못되었다고 가정 해보십시오. 이것이 해결책입니다. vim이 명령을 실행하기 전에 평가하기를
원합니다

답변:


2

변수에 관한 것이 아니라 vim abbreviate 명령이 도움이 될 수 있습니다. 명령 행에서 시도하십시오.

:abbreviate foo pattern

그때

:Ggrep foo<space>

'패턴'에 'foo'가 완료됩니다.


이제 실행 해보십시오 echo foo. OPPS echo pattern변수가 아닙니다. 이것은 해킹과 오해입니다.
albfan

7

는 어때:

:execute ':grep ' . foo

foo의 내용을 올바르게 피하려면 어떻게해야합니까? ", ', /, \ 등의 특수 문자를 포함 할 수 있습니다.
Vitaly Kushner

1
@Vitaly Kushner : ": help escape ()"및 ": help fnameescape ()"를 참조하십시오.
garyjohn

escape ()는 알고 있지만 어떤 캐릭터를 이스케이프해야하는지 잘 모르겠습니다.
Vitaly Kushner

fnameescape ()는 파일 이름 인수가 아니며 플러그인 함수에 대한 인수가 아닙니다. I : let foo = "aaa \"bbbb'cccc "
Vitaly Kushner

1
나는 이것도 내 머리카락을 뽑고있다. 그런 let xyz = tabpagenr()다음 과 같은 명령을 실행할 수 없습니다 tabnext xyz. Vim의 스크립팅 언어는 모달 환경이 완벽하기 때문에 결함이 있습니다.
puk

2

:exe솔루션 이 마음에 들지 않으면 =표현식 레지스터 를 사용하여 변수의 내용을 명령 행으로 "읽을 수 있습니다" . 예를 들어, 입력 :Ggrep한 다음 Ctrl- 를 누르고 r입력 =foo하고을 누릅니다 Enter. 변수 foo에 "pattern"이 포함되어 있다고 가정하면 명령 행은 다음과 같아야합니다.

:Ggrep pattern

이것은 실행될 실제 명령을 볼 수 Enter있고 두 번째 를 누르기 전에 수정할 수도 있다는 이점이 있습니다 .

보다:

:help "=
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.