วิธีการคัดลอกข้อมูลระหว่างอินสแตนซ์ต่าง ๆ ของ vim


41

หากฉันใช้ vim แรกเพื่อคัดลอกบรรทัด (พร้อมyy) ฉันจะวาง vim (ด้วยp) ของเทอร์มินัลอื่นได้อย่างไร มีคำสั่งหรือการตั้งค่าใดที่สามารถทำได้หรือไม่? ฉันสามารถคัดลอกและวางในคลิปบอร์ดของระบบส่วนกลางได้หรือไม่

ฉันรู้ว่าวิธีต่อไปนี้เป็นไปได้ แต่ฉันต้องการวิธีที่ง่ายกว่า:

  1. ฉันไม่ต้องการออกจากกลุ่มแรกและเปิดกลุ่มที่สองอีกครั้ง

  2. ฉันไม่ต้องการใช้หน้าต่างแยกต่างหาก (พร้อม:sp)

คำตอบ:


49

ก่อนอื่นคุณต้องติดตั้งเวอร์ชันที่เปิดใช้งานคลิปบอร์ด เพื่อรองรับผู้ใช้ที่มีสภาพแวดล้อมที่ไม่ใช่แบบกราฟิก (เช่นผู้ใช้ Ubuntu Server) vimและvim-tinyไม่ขอความสามารถนี้ คุณจะต้องติดตั้งGVim ติดตั้ง GVimซึ่งเปิดใช้งานแบบกราฟิกหรือในเทอร์มินัลของคุณ GVim จะแทนที่vimคำสั่ง

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

ในกลุ่มแรกดึงบรรทัดลง+ทะเบียน:

"+yy

จากนั้นเพื่อวางจากการ+ลงทะเบียนในกลุ่มที่สอง:

"+p

:help registersสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการลงทะเบียนที่มีอยู่ให้ตรวจสอบ คุณยังสามารถใช้"+pเพื่อวางข้อความที่คัดลอกมาจากแหล่งอื่นบนระบบของคุณ


สำหรับสิ่งที่คุ้มค่าถ้าคุณติดตั้ง GVim (แพคเกจอาจเรียกบางอย่างเช่น vim-gnome) รายการเมนูมักจะให้ทางลัดที่สำคัญที่พวกเขาจะเรียก
zpletan

1
ฉันไม่ต้องการติดตั้ง Gvim ฉันจะทำเช่นนี้เป็นกลุ่มได้อย่างไร
trusktr

1
@trusktr ใช้งานได้จริงเช่นกัน ในคำถาม & คำตอบนี้บอกว่าคุณต้องการอย่างน้อยเป็นกลุ่ม 7.3.74 (ซึ่งหมายถึง Ubuntu 11.10 หรือใหม่กว่า)
lumbric

นี่เป็นวิธีการที่ไม่ทำงานหากคุณเริ่มใช้ vim ใน tmux และ vim เริ่มทำงานจากภายนอก - โอกาสใด ๆ ที่คุณรู้ว่าจะแก้ไขปัญหานี้อย่างไร
serup

"*yy, "*pยังใช้งานได้ หากคุณเข้าชม:regคุณจะเห็นการลงทะเบียนดารา
elquimista

20

ทางออกที่ดีที่สุดสำหรับฉัน (ที่ไม่ต้องการให้ฉันเปลี่ยนนิสัยการผูกกุญแจ) อยู่ที่นี่: https://stackoverflow.com/questions/9166328/how-to-copy-selected-lines-to-clipboard-in- เป็นกลุ่ม

เพิ่งใส่:

set clipboard=unnamedplus

.vimrcในของคุณ


ฉันต้องการเพิ่มset clipboard=unnamedplusร่วมกับการติดตั้ง GVim จริง ๆ อย่างไรก็ตามฉันสามารถใช้ xfce4-terminal สำหรับ Vim แทนโปรแกรม GVim จริง
jbrock

9

ฉันชอบทางออกของ Bill และฉันได้สร้างแผนที่:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

คนแรกในโหมดภาพคัดลอกทั้งหมดใน / tmp / vitmp และคนที่สองคัดลอกเนื้อหาจาก / tmp / vitmp ในไฟล์


วิธีแก้ปัญหาง่ายๆที่ตรงไปตรงมา - วิธีแฟชั่นแบบเก่า - ขอบคุณที่ทำเพื่อฉัน
serup

สิ่งที่ฉันต้องพิมพ์เป็นกลุ่มหลังจากเพิ่มสิ่งนี้ลงใน. vimrc
Vitaly Zdanevich

คุณต้องตั้งค่ากลุ่มเพื่อให้คุณสามารถใช้คีย์ผู้นำตามด้วย y เพื่อคัดลอกคีย์ผู้นำตามด้วย p เพื่อวาง
กลั้ว Sadek

1
นี่คือผลงานชิ้นหนึ่ง "*yดูเหมือนว่าการใช้งานจะใช้งานไม่ได้บนเซิร์ฟเวอร์
ospider

พุทโธ่. ฉันได้รับการค้นหาชั่วโมงในปัญหานี้โดยใช้เป็นกลุ่มใน tmux ในนักเทียบท่า vimrc ปกติของฉันซึ่งมีชื่อ / unnamedplus แล้วไม่ได้ใช้ vim ใน tmux ใน docker ไม่ได้ทำอะไรที่ฉันพบบนอินเทอร์เน็ต อย่างไรก็ตามสิ่งนี้ดูเหมือนว่าจะใช้ได้กับทุกเครื่อง! ในนักเทียบท่าบน Mac และบน Arch โดยกำเนิด ขอขอบคุณ!!
Tommy

5

ฉันเคลื่อนที่ไปมาระหว่างเครื่อง Unix ตระกูลต่างๆและพบว่าลำดับต่อไปนี้ใช้ได้กับฉันเสมอ:

ในเซสชัน vi ต้นทาง:

  1. ใช้ESC m aเพื่อทำเครื่องหมายบรรทัดแรก
  2. ใช้ESC m bเพื่อทำเครื่องหมายบรรทัดสุดท้าย
  3. ใช้:'a,'b w! xferเพื่อเขียนช่วงของไฟล์ขูด

ในเซสชันปลายทาง:

  1. เลื่อนเคอร์เซอร์ไปที่บรรทัดที่แทรก
  2. ใช้ESC :r xferสำหรับอ่านข้อความ

ฉันรู้ว่ามันไม่สวย แต่ใช้งานได้สำหรับฉันเสมอ!


2

มันค่อนข้างง่ายจริง ๆ : ติดตั้งเวอร์ชันvimที่รองรับคลิปบอร์ด หากคุณvimไม่ได้รับหนึ่งในสิ่งต่อไปนี้:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

vimเมื่อติดตั้งแล้วทำงานเพียง คุณสามารถตรวจสอบว่าคลิปบอร์ดเปิดใช้งานโดยเรียกใช้:

 vim --version|grep clipboard

+xterm_clipboardคุณควรจะเห็น


คำตอบนี้มาถึงหัวใจของปัญหาซึ่งคือเวอร์ชั่นของ Vim ของคุณเปิดใช้งานคุณสมบัติคลิปบอร์ดไหม หากไม่เป็นเช่นนั้นคำตอบอื่น ๆ ที่ไม่ใช่จะสร้างความแตกต่าง ทำ "vim --version" แล้วมองหา "+ คลิปบอร์ด" ฉันคิดว่า + xterm_clipboard ใช้เฉพาะในกรณีที่คุณต้องการคลิปบอร์ด X11 รองรับ แต่ถ้าคุณใช้ Ubuntu คุณก็ต้องการสิ่งนี้เช่นกัน
เรย์

2

คุณอาจจะเกลียดคำตอบนี้ ฉันเคยทำงานใน vi ย้อนกลับไปในยุค 80 บนคอมพิวเตอร์ Unix หลายเครื่องและมีโอกาสที่จะได้เล่นใน Linux

โซลูชันของฉันในการตัดและวางกำลังใช้ Putty ที่ทำงานบน Windows เพื่อเข้าถึงกล่อง Linux ของฉัน

สีโป๊วให้คุณคัดลอก txt ใด ๆ ในหน้าต่างของมันโดยเพียงแค่ไฮไลต์มัน จากนั้นคุณสามารถไปที่หน้าต่าง / เซสชันของ Putty อื่นแล้วคลิกขวาเพื่อวาง

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


1

มันไม่ได้ใช้ yy อย่างแน่นอน แต่ถ้าคุณเลือกข้อความที่คุณต้องการคัดลอกด้วยเมาส์ (บางครั้งคุณอาจต้องใช้ Shift- [ลาก]) ให้สลับไปที่หน้าต่างเทอร์มินัลอื่นและทำ [คลิกกลาง] หรือ Shift- [กลาง คลิก] ตรงนั้นข้อความจะถูกแทรกที่จุดแทรกปัจจุบันของคุณ

สิ่งนี้ใช้ได้กับโปรแกรม command-line และ GUI ส่วนใหญ่ไม่เพียง แต่สำหรับ vim เท่านั้น

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