คัดลอกทุกบรรทัดไปยังคลิปบอร์ด


564

มีวิธีการคัดลอกทุกบรรทัดจากไฟล์ที่เปิดไปยังคลิปบอร์ดในเครื่องมือแก้ไข VI หรือไม่ ฉันพยายามyGแต่ไม่ได้ใช้คลิปบอร์ดเพื่อจัดเก็บบรรทัดเหล่านั้น

เป็นไปได้เหรอ?



1
หากคุณใช้ Windows และ yank ใช้งานไม่ได้ให้ดูคำตอบที่ 17 จากด้านบน: stackoverflow.com/questions/1620018/…
Noumenon

คำตอบ:


636

คุณควรดึงข้อความไปยัง*หรือ+ ลงทะเบียน :

gg"*yG

คำอธิบาย:

  • gg เพื่อรับเคอร์เซอร์ไปที่อักขระตัวแรกของไฟล์
  • "*yเพื่อเริ่มต้นคำสั่ง yank เพื่อลงทะเบียน*จากบรรทัดแรกจนกระทั่ง ...
  • G เพื่อไปยังจุดสิ้นสุดของไฟล์

6
คุณทำเครื่องหมายข้อความอย่างไรเพื่อให้ดูเหมือนเป็นปุ่ม? ฉันยังไม่เห็นดังนั้น
jergason

10
สวัสดี ... มันไม่ทำงานข้อมูลคลิปบอร์ดยังคงไม่เปลี่ยนแปลง เมื่อฉันพิมพ์เคอร์เซอร์ gg ไปที่บรรทัดแรก ... แต่เมื่อฉันพิมพ์ "* yG ..cpu ส่งเสียงเตือนที่ * .. ดังนั้นมันเป็นเรื่องปกติหรือมีปัญหากับเสียงเรียกเข้าของฉันหรือไม่ฉันอยู่ใน Ubuntu ..
Xinus

1
คุณเปิดใช้งาน Deadkeys หรือไม่ (เช่นเมื่อคุณกด 'a คุณจะได้รับá) ถ้าเป็นเช่นนั้นคุณต้องกดเว้นวรรคหลังจาก"นั้น
Tordek

144
Vim สามารถเข้าถึงคลิปบอร์ดของระบบได้เท่านั้นหากคอมไพล์โดยเปิดใช้งาน xterm_clipboard หากต้องการทราบว่าคุณมีคุณสมบัตินี้หรือไม่ให้เรียกใช้:versionเป็นกลุ่มและค้นหาการ+xterm_clipboardตั้งค่าสถานะ หากนำหน้าด้วยเครื่องหมายลบคุณจะไม่มีฟังก์ชันนี้ หากเป็นกรณีนี้คุณอาจต้องการรวบรวมเสียงเรียกเข้าด้วยตนเองหรือเรียกใช้ gvim ซึ่งโดยปกติจะเปิดใช้งานคุณลักษณะนี้
nelstrom

9
ปัญหาเกี่ยวกับวิธีนี้คือมันเลื่อนเคอร์เซอร์และเลื่อนหน้าต่างไปรอบ ๆ สองครั้ง คำตอบอื่น ๆ ที่มีการกดแป้นพิมพ์น้อยลงและข้อบกพร่อง :)
sehe

696

ใช้:

:%y+

เพื่อดึงสายทั้งหมด

คำอธิบาย:

  • % เพื่ออ้างถึงคำสั่งถัดไปเพื่อทำงานกับทุกบรรทัด
  • y เพื่อดึงเส้นเหล่านั้น
  • + เพื่อคัดลอกไปยังคลิปบอร์ดของระบบ

หมายเหตุ : ใน Windows +และ*เทียบเท่าดูคำตอบนี้


19
และจะไม่เปลี่ยนตำแหน่งเคอร์เซอร์
nperson325681

1
@guangnan: การลงทะเบียนเหล่านี้ไม่มีอยู่ใน vi; เฉพาะในกลุ่ม ลองพิมพ์:helpเพื่อให้แน่ใจว่าคุณใช้งานจริง
Compiler ที่เห็นได้ชัดเจน

6
ฉันต้องการset clipboard=unnamedแต่แล้วก็ใช้งานได้ดี!
cdunn2001

234
Vim พูดว่าE850: Invalid register name:(
lony

23
วิธีการแก้ปัญหานี้ใช้งานได้เฉพาะเมื่อเป็นกลุ่มที่รวบรวมกับตัวเลือกคลิปบอร์ด (vim --version จะแสดง + คลิปบอร์ดในกรณีนั้น) หากไม่เป็นเช่นนั้นโซลูชันของ Brian (:% w! pbcopy) เป็นโซลูชันสำหรับ Mac ทางเลือกมีให้สำหรับระบบปฏิบัติการอื่น (เช่น xclip)
yaccob

90

บน Mac

  • คัดลอกส่วนที่เลือก: เลือกข้อความ (ประเภทvหรือVในโหมดปกติ) และประเภท:w !pbcopy

  • คัดลอกไฟล์ทั้งหมด :%w !pbcopy

  • ผ่านมาจากคลิปบอร์ด :r !pbpaste


6
ทำงานได้อย่างราบรื่น คำอธิบายของคำสั่งจะดีจริงๆ
Vlad Manuel Mureșan

5
@Geo pbcopyเป็นโปรแกรมอรรถประโยชน์สำหรับ Mac บน Linux xselอาจใช้งานได้แทนหรือclipบน Windows
เดวิดลอร์ด

1
สิ่งนี้จะไม่ทำงานหากไฟล์ยาวเกินความสูงของเครื่อง
Sridhar Sarnobat

1
@SridharSarnobat :%w !pbcopyยังคงทำงานหากไฟล์นั้นมีความยาวมากกว่าความสูงของเทอร์มินัล
Adrian Schmidt

โอ้ขอโทษฉันหมายถึง ssh ที่ลูกค้าเป็น Mac และเซิร์ฟเวอร์คือ Linux (ซึ่งฉันคิดว่าเป็นสิ่งที่ OP มองหา แต่ตอนนี้ฉันคิดว่ามันเป็นปัญหาที่ไม่เกี่ยวข้อง) ในการป้องกันของฉันฉันจะหลีกเลี่ยงเป็นกลุ่มสำหรับการคัดลอกและวางสำหรับไฟล์ในเครื่อง แต่นั่นเป็นรสนิยมส่วนตัวของฉัน คำแนะนำที่ดี
Sridhar Sarnobat

56

+คลิปบอร์ดเป็นบัฟเฟอร์ ในการคัดลอกไปยังคลิปบอร์ดทำ"+yและ [เคลื่อนไหว]

ดังนั้นgg"+yGจะคัดลอกไฟล์ทั้งหมด

ในทำนองเดียวกันเมื่อต้องการวางจากคลิปบอร์ด "+p


4
เพียงเพิ่มในนี้ (4 ปีต่อมา ... ) นี่มีข้อเสียเปรียบเล็กน้อยที่ตำแหน่งเคอร์เซอร์ของคุณจะข้ามไปที่ด้านบนของไฟล์ เพื่อหลีกเลี่ยงปัญหานี้ (เช่นหากคุณจับคู่สิ่งนี้กับทางลัดใน vimrc ของคุณ) คุณสามารถทำสิ่งที่ชอบ: mqgg "+ yG`q
Tom Lord

45

อีกวิธีที่ง่ายในการคัดลอกไฟล์ทั้งหมดหากคุณประสบปัญหาในการใช้ VI เพียงแค่พิมพ์ "cat filename" มันจะสะท้อนไฟล์ไปยังหน้าจอและจากนั้นคุณสามารถเลื่อนขึ้นและลงและคัดลอก / วาง


1
E603: จับโดย: ลอง
พอลคริสโจนส์

2
และถ้าคุณต้องการทำเช่นนั้นโดยไม่ต้องปล่อย vim คุณสามารถเรียกใช้คำสั่งต่อไปนี้: :!cat %. และเพื่อคัดลอกเนื้อหาของไฟล์โดยทางโปรแกรมไปยังคลิปบอร์ดบน Mac OS::!cat % | pbcopy
TanguyP

จำเป็นต้องคัดลอกไฟล์จาก Ubuntu VM บน Windows ไปยัง Debian ใน GCP ที่เปิดในหน้าต่างเบราว์เซอร์ ... : / การเปลี่ยนแปลงของ vim yanking ไม่ทำงานนี่เป็นการทำงานเพื่อวางลงใน Windows แล้วอัปโหลดไฟล์ไปที่ GCP
frmbelz

31

นี่คือสิ่งที่ฉันทำเพื่อดึงไฟล์ทั้งหมด:

ggVGy

12
ฉันเกรงว่าสิ่งนี้จะไม่ตอบคำถามในขณะที่คุณกำลังลงทะเบียนเริ่มต้นไม่ใช่ไปที่คลิปบอร์ด
Compiler ที่เด่นชัด

2
@ConspicuousCompiler มันจะถ้าเขามีclipboardชุดเพื่อคัดลอกข้อความ yanked ลง+แม้ว่า
TankorSmash

@TankorSmash ไม่ใช่วิธีที่เร็วที่สุด (:% y) หรือไม่ประณีต (อย่างน้อย ggyG ก็ดีกว่า)
pedroapero

@ConspicuousCompiler ความแตกต่างระหว่างการลงทะเบียนเริ่มต้นและคลิปบอร์ดคืออะไร
nilon

17

คุณสามารถใช้คำสั่ง "cat" เพื่อเปิดไฟล์และใช้เมาส์เพื่อคัดลอก


5
แต่นั่นจะไม่ใช่วิธี "vi" ถ้าไฟล์มีขนาดใหญ่แล้วมันจะเป็นปัญหา ... นี่อาจใช้งานได้ แต่ไม่ใช่วิธีที่แนะนำ ...
Aditya

1
resetเทอร์มินัลล่วงหน้าจากนั้นเลือกทั้งหมดและคัดลอก งานนี้ผ่านsshช่วง
arcol

วิธีที่เร็วที่สุดสำหรับไฟล์ขนาดใหญ่ (ต่ำกว่า 10,000 บรรทัด) ในเซิร์ฟเวอร์ระยะไกลที่แตกต่างกันหาก xterm_clipboard ไม่สามารถใช้งานได้
Matias Haeussler

10

(ตอบกลับไปที่ @rshdev และเพื่อหลีกเลี่ยงการคอมไพล์เป็นกลุ่มด้วย + xterm_clipboard ต่อ @nelstrom ในความคิดเห็นที่ OP)

มีโปรแกรมชื่อ xclip ที่ทำงานเหมือน putclip บน Ubuntu 11:

:%!xclip -sel clip
u

มันไม่ได้ติดตั้งโดยค่าเริ่มต้น เพื่อติดตั้งใช้:

sudo apt-get install xclip

10

บน Ubuntu 12

คุณอาจลองติดตั้งvim-gnomeแพ็คเกจ:

sudo apt-get install vim-gnome

ฉันพยายามเพราะvim --versionบอกฉันว่าจะปิดการใช้งานธงxterm_clipboard (ระบุโดย- ) ซึ่งจำเป็นสำหรับการใช้ฟังก์ชั่นคลิปบอร์ด

-> การติดตั้งแพคเกจvim-gnomeบน Ubuntu 12 ยังติดตั้ง vim เวอร์ชันคอนโซลซึ่งเปิดใช้งานตัวเลือกนี้ (ระบุด้วย+ก่อนเครื่องหมาย xterm_clipboard)

บน Arch Linux

คุณอาจติดตั้งvim-clipboardด้วยเหตุผลเดียวกัน

หากคุณเรียกใช้ neovim คุณควรติดตั้งxclip(ดังอธิบายโดยhelp clipboard-tool)


1
unix.stackexchange.com/questions/25965/… มีตัวเลือกอื่นอีกไหมที่ใครจะรู้?
Sandip Pingle

6

หากคุณใช้ Vim ในโหมดแสดงภาพปุ่มตัดและวางแบบมาตรฐานจะมีผลกับ Windows เป็นอย่างน้อย

  • CTRLA หมายถึง "ทำเครื่องหมายไฟล์ทั้งหมด
  • CTRLC หมายถึง "คัดลอกส่วนที่เลือก
  • ESC หมายถึง "ยกเลิกการเลือกดังนั้นการกดปุ่มครั้งต่อไปของคุณจะไม่แทนที่ไฟล์ทั้งหมด :-)

อย่างน้อยใน Ubuntu เทอร์มินัล (Gnome) การคัดลอกมาตรฐานก็ใช้งานได้ ( CTRLSHIFTCแม้ว่าจะไม่มีทางลัดแป้นพิมพ์มาตรฐานสำหรับselect all(นอกเหนือALTEจากตามด้วยA)


6
แต่ถ้าคุณไม่ได้ใช้ mswin.vim ctrl-a จะเพิ่มหมายเลขถัดไปในบรรทัดปัจจุบัน
Mark Rushakoff

@ Mark ลักษณะการทำงานนี้มาจากการติดตั้ง Vim มาตรฐานดังนั้นฉันคิดว่านั่นเป็นค่าเริ่มต้น การเดิมพันทั้งหมดจะปิดหากสภาพแวดล้อมมีการกำหนดค่าที่แตกต่างกัน แต่ถ้าเป็นกรณีนี้ฉันสงสัยว่า OP จะรู้ว่าพวกเขากำลังทำอะไร :-) ไม่ว่าในกรณีใด OP ระบุไว้ในความคิดเห็นที่พวกเขาอยู่บน Ubuntu ดังนั้น Windows คำตอบของฉันอาจใช้ไม่ได้ สิ่งที่สถานี Gnome จะ
paxdiablo

5

คุณสามารถกด gg เพื่อค้นหาเคอร์เซอร์ของคุณไปที่จุดเริ่มต้นของไฟล์จากนั้นกด yG เพื่อคัดลอกเนื้อหาทั้งหมดตั้งแต่ต้นจนจบ (ตำแหน่งที่อยู่ G) เพื่อบัฟเฟอร์โชคดี!


4

ฉันลองคำสั่งบางอย่างที่ผู้คนพูดถึงข้างต้น ไม่มีใครทำงาน จากนั้นฉันได้รับสิ่งที่ง่ายที่สุดของพวกเขาทั้งหมด

ขั้นตอนที่ 1: vi <filename>
ขั้นตอนที่ 2: คลิกขวาที่แถบชื่อเรื่องของหน้าต่าง Putty
ขั้นตอนที่ 3: เลือก "Clear scrollback" (เพื่อหลีกเลี่ยงการคัดลอกส่วนที่เหลือของเซสชัน SSH ของคุณ)
ขั้นตอนที่ 4: คลิกขวาอีกครั้งและเลือก


1
สำหรับไฟล์ 15,000 บรรทัดสิ่งนี้ไม่ได้หยิบเอาไว้ทั้งหมด ฉันต้องการเพิ่ม Putty's เป็นWindow > Settings > lines of scrollback40000 (ใช้ได้โดยการคลิกขวาที่แถบชื่อเรื่อง) นอกจากนี้ยังช่วยในการใช้catแทน vi เนื่องจากเลื่อนผ่านข้อความทั้งหมด
Noumenon

1
ฉันสิ้นสุดการสูญเสียบรรทัดจากด้านบนและด้านล่างของไฟล์ด้วยวิธีนี้เสมอ สิ่งที่ฉันทำตอนนี้คือ cat จากนั้นคลิกกลางที่จุดเริ่มต้นและจุดสิ้นสุดของไฟล์เพื่อขยายส่วนที่เลือก
Noumenon

เมื่อฉันลองทำสิ่งนี้ฉันเพิ่งได้ 111 บรรทัดบนหน้าจอ แต่มี 174 บรรทัดในไฟล์ของฉันดังนั้นคำตอบ cat ของ Noumenon จึงเหมาะกับฉัน
seizethecarp

3

:%y aส่งเนื้อหาทั้งหมดไปยังบัฟเฟอร์ของกลุ่มการกด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 -> มัน yanks 78 บรรทัดด้านล่างเคอร์เซอร์และบรรทัดปัจจุบันของคุณ

2

ไม่มีแนวคิดของ "คลิปบอร์ด" ใน vi ของ Bill Joy ดังนั้นฉันไม่คิดว่าจะมีวิธีการในตัว

คุณลักษณะคัดลอกสิ่งที่ไฮไลต์สู่คลิปบอร์ดอัตโนมัติของ gVim นั้นง่ายที่สุดหรือใช้โปรแกรมภายนอกผ่าน:!

สำหรับเสียงเรียกเข้าของ Cygwin ฉันใช้

:%!putclip
u

บางที Ubuntu มีแอป CLI เช่น putclip


คำแนะนำที่ดีขอบคุณ! มีโปรแกรมเช่นนี้เรียกว่า xclip สำหรับรายละเอียดฉันโพสต์คำตอบแยกต่างหาก (มันอาจสับสนเกินกว่าที่จะอ่านจากความคิดเห็นโดยไม่มีการขึ้นบรรทัดใหม่และการจัดรูปแบบโค้ด)
Stew

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 หรือ tabs

y G 

จากนั้นย้ายไปที่แท็บแล้ววางตาม

p

และตัดการใช้ไฟล์ทั้งหมด

d G

2

ฉันได้เพิ่มบรรทัดต่อไปนี้ใน. vimrc ของฉัน

nnoremap <F5> :%y+<CR>

สิ่งนี้ทำให้ฉันสามารถคัดลอกข้อความทั้งหมดใน Vim ไปยังคลิปบอร์ดโดยการกดF5(ในโหมดคำสั่ง)


1

นี่คือคำสั่งแผนที่เพื่อเลือกทั้งหมดไปยังคลิปบอร์ดโดยใช้CTRL+ a:

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

เพิ่มลงใน. vimrcของคุณและคุณทำได้ดี ...


1

ฉันรู้ว่าสิบปีต่อไปนี้ควรจะถูกตัดสิน แต่คำตอบสองข้อแรกไม่ได้ผลสำหรับฉันดังนั้นฉันจึงขุดต่อไป บน Redhat (เซิร์ฟเวอร์ระยะไกล) - Windows 10 (เครื่องท้องถิ่น) หากคุณไม่สามารถเลือกสิ่งทั้งหมดด้วยเมาส์คุณจะติดอยู่เพราะสำเนาปกติไม่ทำงานระหว่างรีโมทและคลิปบอร์ดเครื่องท้องถิ่น

ดังนั้นเพื่อคัดลอกบน Linux ระยะไกลและวางบน Windows ท้องถิ่นระบุบัฟเฟอร์หลักด้วย*และทำดีงัด

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พยายามที่จะตั้ง: สำหรับข้อมูลหมอดู: :h unnamed.

นี่คือข้อมูลเพิ่มเติมเกี่ยวกับ vim wikia


0

คุณสามารถใช้ shortcur ได้เช่นนี้

noremap <F6> :%y+<CR>

หมายความว่าเมื่อคุณกด F6 ในโหมด normald มันจะคัดลอกไฟล์ทั้งหมดและเพิ่มลงในคลิปบอร์ด หรือคุณก็สามารถพิมพ์ในโหมดปกติแล้วการผลักดัน:%y+Enter


-1

คลิกปุ่มซ้ายของเมาส์ลากส่วนที่คุณต้องการคัดลอกและปล่อย รหัสจะถูกคัดลอกไปยังคลิปบอร์ดโดยอัตโนมัติ


3
ไฟล์อาจมีขนาดใหญ่และการลากข้อความทั้งหมดด้วยเม้าส์นั้นไม่ได้ผลviเลย
ดร. Beco

1
จริงๆแล้วนี่เป็นคำตอบที่ดีและใช้ได้สำหรับฉัน ในระบบของฉันสภาพแวดล้อมมีข้อ จำกัด ฉันต้องเอาท์พุทบนหน้าจอแมวแล้วใช้เมาส์ลากเลือกและปล่อย .. แล้วฉันคัดลอกไปยัง Windows Notepad ++ .. และใช้งานได้ดี ไม่มีอะไรทำงาน
Apurva Singh

-1

ฉันไม่สามารถคัดลอกไฟล์โดยใช้คำตอบข้างต้น แต่ฉันมีสีโป๊วและฉันพบวิธีแก้ปัญหาใน Quora

  1. เปลี่ยนการตั้งค่าเซสชัน PuTTY ของคุณไปที่การบันทึกและเปลี่ยนเป็น "ตัวอักษรที่พิมพ์ได้" ตั้งค่าไฟล์บันทึก
  2. ทำ cat ของไฟล์ที่เกี่ยวข้อง
  3. ไปที่ไฟล์ที่คุณตั้งไว้ในขั้นตอนที่ # 1 และคุณจะมีเนื้อหาในล็อกไฟล์

หมายเหตุ: คัดลอกอักขระที่พิมพ์ทั้งหมดของเซสชันนั้นไปยังล็อกไฟล์ดังนั้นจึงจะมีขนาดใหญ่ในที่สุด ในกรณีดังกล่าวให้ลบไฟล์บันทึกและกำหนดไฟล์เป้าหมายเพื่อให้คุณได้รับเนื้อหาของไฟล์นั้น ๆ ที่คัดลอกไว้ในเครื่องของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.