Programing

vi에서 한 파일의 내용을 다른 파일로 복사하여 붙여 넣기

lottogame 2020. 4. 13. 08:06
반응형

vi에서 한 파일의 내용을 다른 파일로 복사하여 붙여 넣기


두 파일로 작업하고 있는데 한 파일에서 몇 줄을 복사하여 다른 파일에 붙여 넣어야합니다. 동일한 파일에서 (yy) 및 paste (p)를 복사하는 방법을 알고 있습니다. 그러나 그것은 다른 파일에서 작동하지 않습니다.

또한 잘라 붙여 넣기 방법이 있습니까? 인터넷 검색을 시도했지만 대부분의 리소스는 복사 붙여 넣기에 대해서만 이야기합니다.


텍스트를 자르거나 구르는 방법을 이미 알고 있으므로 다른 파일에 다시 붙여 넣을 때 몇 가지 아이디어가 있습니다.

  • 원하는 텍스트를 잡아 당겨 첫 번째 파일을 편집하십시오. 그런 다음 vi ( :e /path/to/other/file) 내에서 두 번째 파일을 열고 붙여 넣습니다.
  • 사용하여 그들 사이에 분할 창을 탐색 함께 두 파일을 열고 Ctrl+ w, Up/ Down중 하나에 의해를 :

    • vi -o /path/to/file1 /path/to/file2
    • 첫 번째 파일에서 Ctrl+ w,s

Windows에서 VIM을 사용하는 경우 다음을 사용하여 클립 보드 (MS 복사 / 붙여 넣기)에 액세스 할 수 있습니다.

"*dd -줄을 자르십시오 (또는 3dd를 자르려면 3dd)

"*yy -한 줄을 복사하십시오 (또는 3 줄을 복사하려면 3yy)

"*p -커서 다음 줄에 줄 붙여 넣기

"*P -커서 앞에 줄에 줄 붙여 넣기

별도의 VIM 창 사이 또는 VIM과 PC 응용 프로그램 (메모장, 단어 등) 사이에 붙여 넣을 수 있습니다.


d같은 dd잘라내 기를 사용하십시오 .

다른 파일에 여러 줄을 쓰려면 다음을 사용할 수 있습니다.

:<n>,<m> w filename

위치 <n><m>범위는 행 범위를 지정하는 숫자 (또는 기호)입니다.

데스크탑 클립 보드를 사용하려면 +g명령을 살펴보십시오 .


이를 수행하는 한 가지 방법이 있습니다.

  • vim을 시작하고 작업중인 파일 인 file1을 엽니 다.
  • :e file2 : 줄을 복사하려는 파일 인 file2를 불러옵니다.
  • 복사하려는 줄을 찾으십시오. 3 줄이면 3yy
  • :b1 이것은 버퍼 1로 전환되며, 여기서 file1은
  • 당신이 잡아 당긴 선을 어디에 삽입하고 싶은지 알아 내고 p

두 파일을 모두 볼 수 있습니다. 예를 들어 CTRL+w s

절단은 절단 d버퍼 를 절단하고 절단하고 배치합니다. dd줄을 "잘라낼 것"입니다


다른 파일을 열고을 입력 할 수 있습니다 :r file_to_be_copied_from. 또는 버퍼링 할 수 있습니다. 또는 첫 번째 파일로 이동하여 복사하려는 줄로 "qY이동하여을 입력 한 다음 붙여 넣으려는 파일로 이동하여을 입력하십시오 "qP.

"buffer_name, 버퍼에 복사합니다. Yk하고 P넣습니다. 희망이 도움이됩니다!


이것들은 모두 좋은 제안이지만 다른 파일에서 텍스트의 위치를 ​​알고 있다면 sed를 쉽게 사용하십시오. :r! sed -n '1,10 p' < input_file.txt커서의 현재 위치에서 이미 열려있는 파일에 10 줄이 삽입됩니다.


파일을 편집하는 동안 시작과 끝에서 사용할 위치를 표시하십시오.

ma- a마크를 설정

mb- b마크를 설정

그런 다음 다른 파일로 복사하려면 다음 w명령을 사용하십시오 .

:'a,'bw /name/of/output/file.txt

201705 업데이트 :

vimrc 파일에 다음 줄을 추가하면

클립 보드 설정 = 이름 없음

VIM은 시스템 클립 보드를 사용하고 있습니다


방금 다른 VIM 인스턴스 창 사이에 내용을 복사하는 방식에서 yank 방식이 작동하지 않는다는 것을 알았습니다. (적어도 VIM 지식을 기반으로 작동하지 않습니다. 작동 할 수있는 다른 방법이 있는지 모르겠습니다).

yank 방식은 내 테스트에 따라 동일한 창에서 여러 파일을 여는 방식에서만 작동합니다.

그렇게하고 싶다면 ctrl + x, ctrl + c (Windows에서)와 같은 OS cut-copy-past 방식을 사용하는 것이 좋습니다.


이 리맵은 저에게 매력처럼 작동합니다.

vmap <C-c> "*y     " Yank current selection into system clipboard
nmap <C-c> "*Y     " Yank current line into system clipboard (if nothing is selected)
nmap <C-v> "*p     " Paste from system clipboard

따라서 시각 모드에있을 때 원하는 줄을 선택하고 Ctrl + c를 누른 다음 Ctrl + v를 눌러 수신자 파일에 텍스트를 삽입합니다. "* y도 사용할 수 있지만 가끔 기억하기 어렵다고 생각합니다.

이것은 vim에서 클립 보드로 텍스트를 복사 할 때도 유용합니다.

출처 : http://vim.wikia.com/wiki/Copy_and_paste_between_sessions_using_a_temporary_file


동일한 VIM 인스턴스에서 열린 두 버퍼 (== 파일) 사이에 텍스트를 복사해도 문제가되지 않습니다. 한 번의 버퍼에서 y(비주얼 모드에서 복사 영역을 표시했다고 가정) 다른 버퍼에 붙여 넣기 만하면 됩니다. 로 p. 동일한 VIM 인스턴스에있는 한 다른 탭에서도 작동합니다.

동일한 VIM 인스턴스에서 두 파일을 여는 방법은 시스템에 따라 다릅니다.

  • Win32에는 컨텍스트 메뉴에 두 개 이상의 파일을 선택하면 하나의 vim으로 편집 이라는 옵션이 있습니다.
  • 콘솔에있을 때 vim file1 file2
  • VIM을 다른 도구의 편집기 --remote-silent로 사용하는 경우 모든 파일이 동일한 인스턴스에서 열리도록 옵션을 지정하십시오

당신이 VIM의 두 가지 경우에 두 개의 파일을 열 경우, 당신은 시스템 클립 보드로 가야 : 첫 번째 VIM에 사용하여 시스템 클립 보드에 텍스트 꺼낼 "+y(다시를, 영역을 표시하기 전에 비주얼 모드에서 빠지게한다) 그런 다음 두 번째 VIM으로 이동하여 클립 보드를 붙여 넣습니다 "+p.


여기에 간단한 답변을 찾지 못했습니다.

목표 : 한 파일을 다른 파일로 저장합니다.

해결책 :

  1. 저장하려는 텍스트를 선택하십시오.
    • 선택을 시작하려는 위치에 커서를 놓습니다.
    • 눌러 v문자를 선택 또는 대문자로 V전체 라인을 선택
    • 커서를 선택하려는 끝으로 이동
  2. 선택한 텍스트를 새 파일에 저장하십시오. :wSpace새 파일의 유형 과 이름 실제로 당신은 볼 수 있습니다

    :'<,'>w new.txt

    그런 다음 Enter


내 시나리오는 파일 1에서 파일 2로 중간에 n 줄을 알 수없는 n 줄을 복사해야한다는 것입니다.

:'a,'bw /name/of/output/file.txt

예 : fileA 및 fileB-25 행에서 fileA로 시작하고 50 행을 복사하여 fileB에 붙여 넣기

fileA

Goto 25th line

25G

copy 50 lines into buffer v

"v50yy

Goto fileB

:e fileB

Goto line 10

10G    

paste contents of buffer v
"vp

  1. 클립 보드 지원으로 Vim 버전을 컴파일했는지 확인하십시오
    • :echo has('clipboard') 돌아와야한다 1
    • 그것이 반환되면 0(예 : OSX, 적어도 El Capitan, Mavericks 및 Mountain Lion-Vim 버전과 함께 제공되며 클립 보드 지원이 없음) Vim 버전을 클립 보드 지원으로 설치해야 brew install vim합니다. (터미널을 다시 시작하는 것을 잊지 마십시오 ( 설치 후)
  2. 시각적 모드로 들어갑니다 ( V-여러 줄, v일반 또는 Ctrlv블록 시각적)
  3. 복사 할 줄을 선택하십시오
  4. "*y -선택된 복사
  5. "*p -복사하여 붙여 넣기

추신:

  • 한 줄을 복사하여 붙여 넣어야 할 경우 JayG 의 답변 으로 2-5 단계를 바꿀 수 있습니다.
  • 추가 할 수있는 줄을 쉽게 선택할 수 set mouse+=a있도록 .vimrc-마우스를 사용하여 vim에서 줄을 선택할 수 있지만 줄 번호 등과 같은 외부 요소는 선택하지 않습니다. 주의 : 마우스로 선택한 텍스트를 시스템 클립 보드로 복사하는 기능을 차단합니다. 정력

아래 옵션은 대부분의 시간과 나중에 붙여 넣기에도 사용됩니다.

 "xnyy
x - buffer name
n - number of line to Yank - optional

줄 바꿈 된 행은 버퍼에 저장됩니다 'x'. 편집의 어느 곳에서나 사용할 수 있습니다.

다른 파일에 줄을 붙여 넣으려면

:e filename&location

예 : 현재 편집에 아래 명령을 입력하십시오

:e /u/test/Test2.sh
and paste using "xP
P - before cursor
p - after cursor

완전한 작업

파일 열기 1 :

vi Test1.sh

a10yy

-Yanked 10 lines

-현재 편집에서 두 번째 파일을 엽니 다

*:e /u/test/Test2.sh*

붙여 넣을 줄로 커서를 이동하십시오.

*"ap*

-버퍼의 라인 '*a*'은 현재 커서 위치 후에 복사됩니다


다른 방법은 두 개의 분할 버퍼에서 두 파일을 열고 관심있는 라인을 시각적으로 선택한 후 다음 "스 니펫"을 사용하는 것입니다.

:vnoremap <F4> :y<CR><C-W>Wr<Esc>p

파일의 일부를 복사하여 다른 파일의 중간에 해당 내용을 붙여 넣으려면이 방법을 사용할 수 있습니다.

:linenumber,linenumber write newfile

예:

:2,34 write temp1

또는

:'mark, 'mark write newfile

예:

:'a,'b write temp1

이제 행이 다른 파일로 복사됩니다. 복사 후 해당 줄을 삭제하려면 할 수 있습니다

:linenumber1,linenumber2 d

또는

:'mark1,'mark2 d

이제 다른 파일로 이동하십시오. 그런 다음 붙여 넣기하려는 행에 커서를 둡니다.

유형

:r!cat temp1

이제 임시 파일의 내용을 여기에 붙여 넣습니다. 내용을 붙여 넣은 후 명령 줄 자체에서 임시 파일을 삭제할 수 있습니다.

:!rm temp1

여러 번 복사하여 붙여 넣으려는 경우 도움이됩니다.


명령 모드로 들어가서 실행

:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from

예 : 현재 열린 파일 20-30에서 줄을 추출filename

:r! sed -n '20, 30p' filename

참고 URL : https://stackoverflow.com/questions/4620672/copy-and-paste-content-from-one-file-to-another-file-in-vi

반응형