vim의 현재 위치에 시스템 명령 출력을 삽입하십시오.


33

vim에서 내가 사용할 때

:r !ls somefilename

현재 행 아래의 새 행에 해당 명령의 출력을 삽입합니다.

만약 내가한다면

let @a = system("ls")

그리고 나중에

"ap

여전히 현재 행 아래의 새 행에 출력을 삽입합니다.

현재 위치에서 vim insert 출력을 만드는 방법이 있습니까?


답변:


14

삽입 모드에서 Ctrl-R *를 사용하여 문자 사이에 클립 보드 버퍼의 내용을 붙여 넣을 수 있습니다 (다른 버퍼의 경우와 비슷한 방법). 따라서 시스템 명령을 버퍼로 가져올 수 있으면 설정해야합니다. (출처 : https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position ).

:let @a=system("ls -l")출력 ls -l을 register 에 넣습니다 a. 그런 다음을 사용하여 (삽입 모드에서) 붙여 넣을 수 있습니다 ^R-a.


또한 대부분의 플랫폼에서 클립 보드는 레지스터 (일반적으로 *) 와 동기화 되므로 명령 출력을 클립 보드로 파이프 "*하면 사용할 수있게됩니다.
Bruno Bronosky

39
:r !command 

명령의 출력을 읽고 현재 행 아래의 행에 삽입합니다. 이것은 vi가 프로그래밍 된 방식으로 동작을 변경할 수 없습니다.

그러나 당신이 행 번호 3에 있다면 말해보십시오 :r !date. 행 번호 4에 날짜 값을 삽입합니다.

행 번호 3에 :2r !date날짜 값을 표시하려면 행 번호 3에 날짜 값을 삽입하십시오.


4
그것은 다른 줄에 삽입되지만 여전히 다른 줄에 삽입됩니다. 현재 위치에 삽입하고 싶습니다!
deshmukh

13

커서 앞에 외부 명령의 출력을 붙여 넣는 다른 방법은 다음과 같습니다.

:exe 'norm i' . system("ls -l")

또는 표현식 레지스터 ( :help @=)를 사용하십시오.

"=system('ls -la')

그런 다음를 누르십시오 P. 또는 더 짧은 방법 :

<CTRL-R>=system('ls -la')<CR>

4
이것이 답입니다.
Jacob

1
동의했다! 이것은 :exe명령에 포함될 수 있는보다 프로그래밍 방식의 솔루션을 포함하기 때문에 실제로 정답이어야 합니다.
32 분에 metasoarous
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.