모든 줄을 클립 보드에 복사


564

VI 편집기에서 열린 파일의 모든 줄을 클립 보드로 복사하는 방법이 있습니까? 시도 yG했지만 클립 보드를 사용하여 해당 줄을 저장하지 않습니다.

그래서 가능합니까?



1
Windows를 사용 중이고 yank가 작동하지 않는 경우 상단에서 17 번째 답변을 참조하십시오 : stackoverflow.com/questions/1620018/…
Noumenon

답변:


635

텍스트를 등록* 하거나 + 등록해야합니다 .

gg"*yG

설명:

  • gg 커서를 파일의 첫 문자로 가져 오기
  • "*y*첫 번째 줄부터 레지스터에 대한 yank 명령을 시작할 때까지 ...
  • G 파일의 끝으로 이동

6
키처럼 보이도록 텍스트를 어떻게 표시합니까? 나는 아직 그렇게 보지 못했습니다.
jergason

10
안녕하세요 ... 작동하지 않습니까? 클립 보드 데이터는 변경되지 않습니다. .. 내가 GG 커서를 입력 할 때 첫 번째 줄에 간다 ...하지만 "입력 할 때 * YG ..cpu 경고음 ..so가 정상 또는 내 정력에 약간의 문제가 *에서 우분투에 무엇입니까?
Xinus

1
데드 키가 활성화되어 있습니까? (예를 들어, 당신은 'a를 얻을 때') 그렇다면, 당신은 다음에 스페이스를 눌러야합니다 ".
Tordek

144
Vim은 xterm_clipboard가 활성화 된 상태에서 컴파일 된 시스템 클립 보드에만 액세스 할 수 있습니다. 이 기능이 있는지 확인하려면 :versionvim을 실행 하고 +xterm_clipboard플래그를 찾으십시오 . 앞에 빼기 부호가 있으면이 기능이없는 것입니다. 이 경우 vim을 직접 컴파일하거나 일반적으로이 기능이 활성화 된 gvim을 실행하십시오.
nelstrom

9
이 방법의 문제점은 커서를 움직이고 창을 스크롤하는 것입니다. 두번. 다른 대답은 훨씬 적은 키 입력이 단점 :
sehe

696

사용하다:

:%y+

모든 줄을 잡아 당기십시오.

설명:

  • % 모든 줄에서 작동하도록 다음 명령을 참조하십시오.
  • y 그 줄을 잡아 당기다
  • + 시스템 클립 보드에 복사

NB :에 윈도우, +그리고 *동일은 이 답변을 참조 .


19
또한 커서 위치를 변경하지 않습니다.
nperson325681

1
@ guangnan :이 레지스터는 vi에 존재하지 않습니다. vim에서만. :help실제로 vim 상태인지 확인하려면 입력하십시오 .
눈에 띄는 컴파일러

6
나는해야 set clipboard=unnamed했지만, 이것은 훌륭하게 작동했습니다!
cdunn2001

234
Vim 말한다 E850: Invalid register name:(
lony

23
이 솔루션은 vim이 클립 보드 옵션으로 컴파일 된 경우에만 작동합니다 (vim --version은 + clipboard를 표시합니다). 그렇지 않은 경우 Brian의 솔루션 (: % w! pbcopy)은 Mac 용 솔루션입니다. 다른 운영 체제 (예 : xclip)에 대한 대안을 사용할 수 있습니다.
yaccob

90

Mac에서

  • 선택한 부분 복사 : 텍스트를 시각적으로 선택하고 (유형 v또는 V일반 모드) 유형:w !pbcopy

  • 전체 파일을 복사 :%w !pbcopy

  • 클립 보드에서 과거 :r !pbpaste


6
원활하게 작동합니다. 명령에 대한 설명은 정말 좋을 것입니다.
블라드 마누엘 Mureșan

5
@Geo pbcopy는 Mac 유틸리티입니다. Linux에서는 xsel대신 또는 clipWindows에서 작동 할 수 있습니다 .
David Lord

1
파일이 터미널의 높이보다 길면 작동하지 않습니다.
Sridhar Sarnobat

1
:%w !pbcopy파일이 터미널의 높이보다 길면 @SridharSarnobat가 여전히 작동합니다.
애드리안 슈미트

죄송합니다, 클라이언트가 Mac이고 서버가 Linux 인 ssh를 의미했습니다 (OP가 찾고있는 것으로 생각했지만 지금은 그것에 대해 생각하기 때문에 관련이 없습니다). 국방에서는 로컬 파일을 복사하여 붙여 넣을 때 vim을 피할 수는 있지만 개인적인 취향입니다. 좋은 팁.
Sridhar Sarnobat '

56

클립 보드는 buffer +입니다. 클립 보드에 복사하려면 "+y및 [이동]을 수행하십시오.

따라서 gg"+yG전체 파일을 복사합니다.

마찬가지로 클립 보드에서 붙여 넣기 "+p


4
이것에 추가하기 만하면 (4 년 후 ...) 커서 위치가 파일의 맨 위로 이동한다는 점에서 약간의 단점이 있습니다. 이것을 피하려면 (예를 들어 vimrc의 바로 가기에 이것을 매핑하는 경우) 다음과 같이 할 수 있습니다 : mqgg "+ yG`q
Tom Lord

45

VI 사용에 문제가있는 경우 전체 파일을 복사하는 또 다른 쉬운 방법은 "cat filename"을 입력하는 것입니다. 파일을 화면에 에코 한 다음 위아래로 스크롤하여 복사 / 붙여 넣기 만하면됩니다.


1
E603 : : catch without : try
Paul Chris Jones

2
그리고 vim을 떠나지 않고 그렇게하려면 다음 명령을 실행할 수 있습니다 :!cat %.. Mac OS에서 클립 보드에 프로그래밍 방식으로 파일 내용을 복사하려면 ::!cat % | pbcopy
TanguyP

브라우저 창에서 열린 GCP에서 Windows의 Ubuntu VM에서 Debian으로 파일을 복사해야했습니다.
frmbelz

31

이것이 전체 파일을 잡아 당기는 것입니다.

ggVGy

12
클립 보드가 아닌 기본 레지스터를 잡아 당기고 있기 때문에 이것이 질문에 대답하지 않을까 걱정됩니다.
눈에 띄는 컴파일러

2
@ConspicuousCompiler 만약 그가 구부러진 clipboard텍스트를 복사하도록 설정 했다면 +.
TankorSmash

@TankorSmash 그러나 가장 빠른 (: % y)도 아니고 (최소한 ggyG가 더 낫습니다) 방법은 아닙니다.
pedroapero

@ConspicuousCompiler 기본 레지스터클립 보드 의 차이점은 무엇 입니까?
nilon

17

"cat"명령을 사용하여 파일을 열고 마우스를 사용하여 복사 할 수 있습니다


5
그러나 "vi"방식이 아닐 것입니다. 파일이
Aditya

1
reset미리 터미널을 선택한 다음 모두를 선택하고 복사하십시오. 이것은 ssh세션을 통해 작동합니다 .
arcol

다른 원격 서버에서 대용량 파일 (10,000 선 아래)를위한 가장 빠른 방법은 xterm_clipboard는 사용할 수없는 경우
마티아스 Haeussler

10

(@rshdev에 대한 답변으로 OP에 대한 의견에서 @nelstrom 당 + xterm_clipboard로 vim을 다시 컴파일하지 않아도 됨)

우분투 11의 putclip처럼 작동하는 xclip이라는 프로그램이 있습니다.

:%!xclip -sel clip
u

기본적으로 설치되어 있지 않습니다. 설치하려면 다음을 사용하십시오.

sudo apt-get install xclip

10

우분투 12

vim-gnome패키지 를 설치하려고 할 수 있습니다 .

sudo apt-get install vim-gnome

때문에 나는 그것을 시도 vim --version는 플래그가 거라고 말했다 xterm_clipboard가 비활성화 (로 표시 -클립 보드 기능을 사용하는 데 필요한 .

-> 우분투 12에 vim-gnome 패키지를 설치하면 vim 의 콘솔 기반 버전도 설치 되었으며이 옵션이 활성화되어 있습니다 ( xterm_clipboard 플래그 앞에 +로 표시)

아치 리눅스에서

vim-clipboard같은 이유로 설치할 수 있습니다 .

neovim을 실행하는 경우 xclip(에 설명 된대로 help clipboard-tool) 설치해야합니다


1
unix.stackexchange.com/questions/25965/… 아는 다른 옵션이 있습니까?
Sandip Pingle

6

비주얼 모드에서 Vim을 사용하는 경우 최소한 Windows에서는 표준 잘라 내기 및 붙여 넣기 키도 적용됩니다.

  • CTRLA "전체 파일을 표시하십시오.
  • CTRLC "선택 내용 복사."
  • ESC "선택 취소, 다음 키를 눌러도 전체 파일이 대체되지 않습니다 :-)

적어도 우분투 터미널 (그놈)에서 표준 사본도 (작동 CTRLSHIFTC을위한 표준 키보드 바로 가기가있을 나타나지 않지만, select all이외 ( ALTE다음 A).


6
그러나 mswin.vim을 사용하지 않으면 ctrl-a는 현재 행에서 다음 숫자를 증가시킵니다.
Mark Rushakoff

@ Mark,이 동작은 표준 Vim 설치에서 온 것이므로 이것이 기본값이라고 가정합니다. 환경이 다르게 구성된 경우 모든 베팅이 해제됩니다.하지만 그 경우 OP는 그들이 무엇을하고 있는지 알 것입니다. 내 대답은 아마 적용되지 않습니다. 그놈 터미널 물건.
paxdiablo 2016 년

5

gg를 눌러 파일의 시작 부분에 커서를 놓은 다음 yG를 눌러 모든 내용을 처음부터 끝까지 (G 위치) buffer.good luck에 복사하십시오.


4

사람들이 위에서 언급 한 몇 가지 명령을 시도했습니다. 아무도 효과가 없었습니다. 그런 다음 나는 가장 간단한 것을 잡았습니다.

1 단계 : vi <filename>
2 단계 : Putty 창의 제목 표시 줄을 마우스 오른쪽 버튼으로 클릭합니다.
3 단계 : 나머지 SSH 세션을 복사하지 않으려면 "스크롤 백 지우기"를 선택합니다
. 4 단계 : 마우스 오른쪽 버튼을 다시 클릭하고 "클립 보드에 모두 복사"를 선택합니다.


1
15000 줄 파일의 경우이 모든 것을 잡지 못했습니다. 퍼티 Window > Settings > lines of scrollback를 40000 으로 늘려야 했습니다 (제목 표시 줄을 마우스 오른쪽 버튼으로 클릭하여 사용 가능). cat모든 텍스트를 스크롤하기 때문에 vi 대신 사용 하는 것도 도움 이됩니다.
Noumenon

1
나는 항상 이런 식으로 파일의 상단과 하단에서 줄을 잃었습니다. 내가 지금하는 일은 cat입니다. 파일의 시작과 끝을 마우스 가운데 버튼으로 클릭하여 선택을 확장하십시오.
Noumenon

나는이 시도 할 때 난 단지 화면에 111 선을 가지고 있지만, 물 자체의 고양이의 대답은 나를 위해 일한 있도록 내 파일에 174 선이있다
seizethecarp

3

:%y a모든 내용을 vim의 버퍼에 p넣습니다. 명령 모드에서을 누르면 커서가 현재 서있는 줄 뒤에 붙잡힌 내용이 붙여집니다.


3

gVim :

:set go=a

ggVG

참조 :help go-a:

'a' Autoselect:  If present, then whenever VISUAL mode is started,
 or the Visual area extended, Vim tries to become the owner of
 the windowing system's global selection.  This means that the
 Visually highlighted text is available for pasting into other
 applications as well as into Vim itself.  When the Visual mode
 ends, possibly due to an operation on the text, or when an
 application wants to paste the selection, the highlighted text
 is automatically yanked into the "* selection register.
 Thus the selection is still available for pasting into other
 applications after the VISUAL mode has ended.
     If not present, then Vim won't become the owner of the
 windowing system's global selection unless explicitly told to
 by a yank or delete operation for the "* register.
 The same applies to the modeless selection.

3

글쎄,이 모든 접근 방식은 흥미 롭지 만 게으른 프로그래머로서 숫자 +의 조합을 사용하여 모든 줄을 사용합니다. y

예를 들어 총 78 줄의 소스 코드 파일이 있으면 다음과 같이 할 수 있습니다.

  1. gg 첫 줄에 커서를 갖다
  2. 삽입 78 + y -> 커서와 현재 줄 아래 78 줄을 잡아 당깁니다.

2

Bill Joy의 vi에는 "클립 보드"라는 개념이 없었기 때문에 빌트인 방법이 없다고 생각합니다.

gVim의 자동 복사 기능-클립 보드로 강조 표시 기능이 가장 편리하거나 다음을 통해 외부 프로그램을 사용하십시오.

Cygwin의 vim에는

:%!putclip
u

어쩌면 우분투에는 putclip과 같은 CLI 앱이 있습니까?


큰 제안, 감사합니다! xclip이라는 프로그램이 있습니다. 자세한 내용은 별도의 답변을 게시했습니다 (추가 줄 바꿈과 코드 형식이 없으면 주석을 읽기가 너무 혼란 스럽습니다).
스튜

2

손가락이 기본으로 설정된 경우 CTRL-A CTRL-C에서 매핑을 시도하십시오 $VIMRUNTIME/mswin.vim.

" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y

" CTRL-A is Select all
noremap <C-A> gggH<C-O>G
inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
cnoremap <C-A> <C-C>gggH<C-O>G
onoremap <C-A> <C-C>gggH<C-O>G
snoremap <C-A> <C-C>gggH<C-O>G
xnoremap <C-A> <C-C>ggVG

<Leader><C-a>와에 매핑했습니다 <Leader><C-c>.


2

vim 또는 해당 탭 내부의 전체 파일을 복사하십시오.

y G 

그런 다음 탭으로 이동하여 붙여 넣습니다.

p

전체 파일 사용을 줄이기 위해

d G

2

.vimrc에 다음 줄을 추가했습니다.

nnoremap <F5> :%y+<CR>

이를 통해 F5(명령 모드에서)를 눌러 Vim의 모든 텍스트를 클립 보드에 복사 할 수 있습니다 .


1

다음은 CTRL+를 사용하여 클립 보드에 모두를 선택하는 맵 명령입니다 a.

"
" select all with control-a
"
nnoremap <C-a> ggmqvG"+y'q

.vimrc에 추가하면 좋습니다.


1

나는 이것에 대해 10 년이 해결되어야한다는 것을 알고 있지만 처음 두 가지 대답은 나에게 도움이되지 않아 계속 파고 들었다. Redhat (원격 서버)-Windows 10 (로컬 컴퓨터)에서 마우스로 모든 것을 선택할 수없는 경우 원격 복사와 로컬 컴퓨터 클립 보드간에 일반 사본이 작동하지 않기 때문에 문제가 발생합니다.

따라서 원격 Linux에서 복사하고 로컬 Windows에 붙여 넣으려면 기본 버퍼를 지정하고 *멋진 이중 k 크를 수행하십시오.

사용하십시오 gg" * yy.


0

이 작업을 수행하는 기능을 만들었습니다 ~/.vimrc.

fun! CopyBufferToClipboard()
    %y+
endfun
nnoremap <Leader>y :call CopyBufferToClipboard()<CR>
command! -nargs=0 CopyFile :call CopyBufferToClipboard()

OBS : neovim을 사용하는 경우 xclip과 같은 클립 보드 관리자도 필요합니다. neovim의 추가 정보 유형:h checkhealth

y모든 복사 피드 +를 "클립 보드 레지스터"로 설정 하기 위해 항상 간단한 클립 보드로 복사 하는 것은 아니라는 점을 언급하는 것도 중요합니다 :set clipboard=unnamed,unnamedplus. mor 정보는 다음을 참조하십시오 :h unnamed..

여기 에 vim wikia에 대한 자세한 정보가 있습니다.


0

다음과 같이 단축을 사용할 수 있습니다.

noremap <F6> :%y+<CR>

즉, 정규 모드에서 F6을 누르면 전체 파일이 복사되어 클립 보드에 추가됩니다. 또는 일반 모드로 입력 :%y+한 다음을 누를 수 Enter있습니다.


-1

마우스 왼쪽 버튼을 클릭하고 복사 및 해제하려는 섹션을 드래그하십시오. 코드가 자동으로 클립 보드에 복사됩니다.


3
파일이 크면 마우스로 전체 텍스트를 드래그하는 것이 생산적이지 않습니다 (또는 vi방법이 아님).
Dr Beco

1
실제로 이것은 좋은 대답이며 저에게 효과적입니다. 내 시스템에서 환경은 제한적입니다. 화면에 출력을 표시 한 다음 마우스를 사용하여 드래그, 선택 및 해제해야합니다. 그런 다음 Windows 메모장 ++에 복사합니다. 다른 것은 작동하지 않습니다.
Apurva Singh

-1

위의 답변을 사용하여 파일을 복사 할 수 없지만 퍼티가 있고 Quora에 대한 해결 방법을 찾았습니다.

  1. PuTTY 세션의 설정을 변경하고 로깅으로 이동하여 "인쇄 가능한 문자"로 변경하십시오. 로그 파일 설정
  2. 해당 파일의 고양이를
  3. 1 단계에서 설정 한 파일로 이동하면 로그 파일에 내용이 표시됩니다.

참고 : 해당 세션의 인쇄 된 모든 문자를 로그 파일에 복사하므로 결국 커질 것입니다. 이 경우 로그 파일을 삭제하고 대상 파일을 분류하여 특정 파일의 내용을 시스템에 복사하십시오.

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