시각적으로 선택한 텍스트를 UNIX 명령에 파이프하고 VIM의 현재 버퍼에 출력을 추가하는 방법

StackOverflow https://stackoverflow.com/questions/230266

  •  04-07-2019
  •  | 
  •  

문제

VIM을 사용하여 시각적 모드에서 선택한 텍스트를 UNIX 명령으로 파이프하고 현재 파일의 끝에 출력을 추가하려고합니다. 예를 들어, 다음과 같은 SQL 명령이 있다고 가정합니다.

SELECT * FROM mytable;

다음과 같은 일을하고 싶습니다.

<ESC>
V                 " select text
:'<,'>!mysql -uuser -ppass mydb

그러나 출력이 현재 선택된 텍스트를 덮어 쓰는 대신 파일 끝에 출력을 추가하고 싶습니다. 당신은 아마 이것이 어디로 가는지 볼 것입니다. VIM을 간단한 SQL 편집기로 사용하고 있습니다. 그렇게하면 VIM을 편집, 조정, 테스트 SQL 코드를 테스트 할 필요가 없습니다.

도움이 되었습니까?

해결책

선택한 텍스트를 파일 끝에 복사하는 것은 어떻습니까? 사본을 선택하고 명령을 실행하는 것은 어떻습니까? 동일한 명령을 반복해서 반복하지 않으려면 사용하여 순서를 녹음 할 수 있습니다. q 또는 새 명령을 추가하십시오. 후자를 다음과 같이 시도했습니다.

:com -range C <line1>,<line2>yank | $ | put | .,$ !rev

그것으로 일부 줄을 선택한 다음 입력 할 수 있습니다. :C. 이것은 먼저 선택을 잡아 당긴 다음 파일의 끝으로 이동하여 Yanked 텍스트를 붙여 넣고 명령을 실행합니다 (rev 이 경우) 새 텍스트를 통해.

다른 팁

더 프로그램 적 접근 방식을 선호하는 경우

:call append(line("$"), system("command", GetSelectedText()))

어디 GetSelectedText 재사용 가능한 기능입니다.

func! GetSelectedText()
  normal gv"xy
  let result = getreg("x")
  normal gv
  return result
endfunc

노력하다

:r | YourCommand

예를 들어:

:r ! echo foo

추가합니다 foo 버퍼에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top