วิธีทำ vim paste จาก (และคัดลอกไปที่) คลิปบอร์ดของระบบ?


770

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

ฉันสามารถทำ vim paste จากและไปยังคลิปบอร์ดของระบบได้หรือไม่?



7
คัดลอก "+ y Paste" + p ใช้งานได้เหมือนงัดแงะและวางยกเว้นที่คุณระบุไว้ก่อนหน้านี้
Banjocat

2
หากต้องการใช้คำสั่งต่อไปนี้ตรวจสอบให้แน่ใจว่าคุณได้ทำแล้ว sudo apt-get install vim-gnomeซึ่งจะเพิ่มฟังก์ชั่นดังกล่าวให้กับคลิปบอร์ดของระบบ
Harnirvair Singh

2
@Harnirvair สำหรับผู้อ่านหลาย ๆ คนที่นี่vim-gnomeอาจเป็น overkill หรือไม่สามารถใช้งานได้ในระบบปฏิบัติการ / distro ของพวกเขาในขณะที่ฉันสงสัยvim-gtkและvim-gtk3มีแนวโน้มที่จะมีอยู่มากขึ้นและดึงการพึ่งพาน้อยลงในขณะที่ยังคงมีการรวมคลิปบอร์ด ฉันไม่แน่ใจว่าสิ่งนี้มีผลกระทบต่อ Wayland อย่างไร)
underscore_d

3
ตามค่าเริ่มต้นบน Fedora - ไม่มีการเข้าถึงคลิปบอร์ด (คุณต้องมี gvim), superuser.com/questions/194747//
icc97

คำตอบ:


881

"*และ"+ลงทะเบียนมีการคลิปบอร์ดของระบบ ( :help registers) พวกเขาอาจทำสิ่งต่าง ๆ ขึ้นอยู่กับระบบของคุณ ตัวอย่างเช่นในระบบที่ไม่ได้ใช้ X11 เช่น OSX หรือ Windows การ"*ลงทะเบียนจะใช้ในการอ่านและเขียนไปยังคลิปบอร์ดของระบบ บนระบบ X11 สามารถลงทะเบียนได้ทั้งสองแบบ ดู:help x11-selectionรายละเอียดเพิ่มเติม แต่โดยทั่วไป"*จะคล้ายคลึงกับ X11 ของPRIMARYเลือก (ซึ่งมักจะสำเนาสิ่งที่คุณเลือกด้วยเมาส์และวางกับปุ่มกลางของเมาส์) และ"+จะคล้ายคลึงกับ X11 ของคลิปบอร์ดเลือก (ซึ่งเป็นคลิปบอร์ดที่เหมาะสม)

หากสิ่งที่เหนือหัวของคุณลองใช้"*yyหรือ"+yyคัดลอกบรรทัดไปยังคลิปบอร์ดของระบบ สมมติว่าคุณมีตัวเลือกการคอมไพล์ที่เหมาะสมตัวเลือกหนึ่งอย่างใดควรทำงานได้ คุณอาจต้องการแมปสิ่งนี้กับสิ่งที่สะดวกกว่าสำหรับคุณ ตัวอย่างเช่นคุณสามารถใส่vnoremap <C-c> "*y~ / .vimrc ของคุณเพื่อให้คุณสามารถเลือกและกดCtrl+ cเพื่อดึงไปยังคลิปบอร์ดของระบบ

โปรดทราบว่าการคัดลอก / วางจากคลิปบอร์ดระบบจะไม่ทำงานหาก:echo has('clipboard')ส่งคืน 0 ในกรณีนี้เสียงเรียกเข้าจะไม่ได้รับการคอมไพล์ด้วย+clipboardคุณสมบัติและคุณจะต้องติดตั้งเวอร์ชันอื่นหรือคอมไพล์ใหม่ linux distros บางตัวมีการติดตั้ง vim ที่น้อยที่สุดตามค่าเริ่มต้น แต่โดยทั่วไปถ้าคุณติดตั้งvim-gtkหรือvim-gtk3แพ็คเกจคุณจะได้รับคุณสมบัติพิเศษ

นอกจากนี้คุณยังอาจต้องการที่จะมีลักษณะที่เป็นตัวเลือกที่อธิบายไว้ที่'clipboard' :help cbในกรณีนี้คุณสามารถ:set clipboard=unnamedหรือ:set clipboard=unnamedplusเพื่อทำการคัดลอก yanking / ลบทั้งหมดไปยังคลิปบอร์ดของระบบโดยอัตโนมัติ นี่อาจเป็นความไม่สะดวกในบางกรณีที่คุณจัดเก็บอย่างอื่นไว้ในคลิปบอร์ดเนื่องจากจะมีการแทนที่

เพื่อวางคุณสามารถใช้"+pหรือ"*p(อีกครั้งขึ้นอยู่กับระบบของคุณและ / หรือตัวเลือกที่ต้องการ) หรือคุณสามารถแมปเหล่านี้กับสิ่งอื่น ฉันพิมพ์พวกเขาอย่างชัดเจน แต่มักพบว่าตัวเองอยู่ในโหมดแทรก ถ้าคุณอยู่ในโหมดแทรกคุณยังสามารถวางพวกเขาด้วยการเยื้องที่เหมาะสมโดยใช้หรือ<C-r><C-p>* ดู<C-r><C-p>+:help i_CTRL-R_CTRL-P

นอกจากนี้ยังเป็นมูลค่าการกล่าวถึงpasteตัวเลือกเป็นกลุ่ม( :help paste) สิ่งนี้ทำให้ vim อยู่ใน "โหมดการวางแบบพิเศษ" ซึ่งจะปิดการใช้งานตัวเลือกอื่น ๆ อีกมากมายทำให้คุณสามารถวางลงในเสียงเรียกเข้าได้อย่างง่ายดายโดยใช้ตัวจำลองเทอร์มินัลหรือทางลัดการวางแบบมัลติเพล็กเซอร์ เพียงพิมพ์:set pasteเพื่อเปิดใช้งานวางเนื้อหาของคุณจากนั้นพิมพ์:set nopasteเพื่อปิดใช้งาน หรือคุณสามารถใช้pastetoggleตัวเลือกเพื่อตั้งรหัสคีย์ที่สลับโหมด ( :help pastetoggle) ฉันขอแนะนำให้ใช้รีจิสเตอร์แทนตัวเลือกเหล่านี้ แต่ถ้าพวกเขายังคงน่ากลัวเกินไปนี่อาจเป็นวิธีการแก้ปัญหาที่สะดวกในขณะที่คุณกำลังทำให้ชิ้นส่วนของคุณสมบูรณ์

ดู:help clipboardรายละเอียดเพิ่มเติมได้ที่


103
นี่เป็นข้อมูลที่มีประโยชน์มาก แต่คุณสามารถสรุปได้ว่าการกดแป้นใดที่ต้องวางเพื่อวางจากคลิปบอร์ดของระบบ ... ตัวอย่างเช่นผู้ใช้ทำ"*pอะไร ฉันกด Shift- 'แล้วกด Shift-8 จากนั้น p ฯลฯ
T. Brian Jones

10
ใช่พิมพ์อักขระสามตัวเหล่านี้ตามลำดับ คำสั่งจำนวนมากในกลุ่มใช้สิ่งที่เรียกว่า "โหมดรอดำเนินการ" ซึ่งกดปุ่มเดียวแล้ว vim รอคีย์เพิ่มเติม ใช้ddตัวอย่างเช่น ครั้งแรกที่dเข้าสู่โหมดผู้ประกอบการที่รอดำเนินการจากนั้นที่สองdเสร็จสิ้นคำสั่งและลบบรรทัด ถ้าคุณพิมพ์dGอย่างไรที่Gจะทำให้มันลบจุดสิ้นสุดของแฟ้มแทนที่จะเป็นเพียงแค่การลบเส้น รีจิสเตอร์ใช้หลักการเดียวกันนี้เพื่ออนุญาตให้ใช้คำสั่งต่าง ๆ
คอนเนอร์

4
อนิจจา ถ้าฉันเคยเห็นโพสต์นี้ก่อนวันนี้! นี่คือทุกสิ่งที่ฉันต้องการรู้เกี่ยวกับการคัดลอกและวางจากคลิปบอร์ดของระบบ "<Cr> <Cp> * หรือ <Cr> <Cp> +" เป็นทองคำบริสุทธิ์
Keith Pinson

54
ความสำคัญ: คุณจำเป็นต้องติดตั้งvim-gtkแพคเกจ (ภายใต้ Debian อย่างน้อย) +xterm_clipboardเพื่อให้ได้เป็นกลุ่มที่มีการรวบรวมกับ เอาฉันไป 40 ล้านเพื่อค้นหาสิ่งนี้และเพียงไม่กี่วินาทีsudo apt-get install vim-gtkเท่านั้น
Dominykas Mostauskis

3
@DominykasMostauskis ใช้งานvim-gnomeได้และได้+xterm_clipboardเปิดใช้งาน
Chev

155

คุณสามารถคัดลอกไปเป็นกลุ่มโดยทางลัดของ gnome-terminal เพื่อวาง สร้างไฟล์ในโหมดแทรกและใช้งาน

Ctrl+ +Shiftv

จำไว้ก่อนที่จะ

 :set paste 

เพื่อหลีกเลี่ยงการสับสนกับการเยื้อง


19
ความยุ่งเหยิงนี้กับการเยื้องถ้ามีหลายบรรทัดเช่นหลามสำหรับวง
Moj

11
ใช้ปุ่มสลับวางเพื่อแทรกโหมด เช่น set pastetoggle = <F2> จากนั้นในโหมดแทรกให้กด <F2> แล้วใส่รหัสไพ ธ อนของคุณ
Jan Weitz

ใช่คัดลอกด้วย Ctrl + Shift + c แล้ววางลงในไฟล์ othe r
neel

1
หากแท็บ / ช่องว่างสีขาว eols ฯลฯ แสดงเป็นตัวอักษรที่มองเห็นได้ (ผ่านตัวเลือก listchars) จากนั้นตัวอักษรทดแทนเหล่านั้นจะถูกคัดลอกแทนตัวอักษรที่ซ่อนอยู่
user907860

2
นี่ควรเป็นคำตอบที่เลือกซึ่งได้รับคำตอบโดยย่อ
Aidin

41

ลินุกซ์

บนระบบ Linux ของฉัน, the +และ*ลงทะเบียนแมปไปยังตัวเลือก X11, ซึ่งสามารถวางด้วยปุ่มกลางของเมาส์ เมื่อใด:set clipboard=unnamedและ:set clipboard=unnamedplusมีการใช้งานจากนั้นลงทะเบียนแมปไปยังคลิปบอร์ดและสามารถวางด้วย CTRL-V

ข้อมูลเฉพาะดูเหมือนจะค่อนข้างกำหนดค่าและขึ้นอยู่กับระบบดังนั้นระยะของคุณจะแตกต่างกันไป คุณควรชี้ไปในทิศทางที่ถูกต้องอย่างแน่นอน

ดูสิ่งนี้ด้วย

http://vim.wikia.com/wiki/Accessing_the_system_clipboard


1
*แผนที่เท่านั้นที่จะลงทะเบียนหลัก X11 (ซึ่งปกติจะวางด้วยเมาส์) +แผนที่ไปยังคลิปบอร์ด X11 ลงทะเบียนตามปกติโดยใช้ทางลัด
ZyX

@ZyX ไม่ได้อยู่ในระบบของฉัน แต่ระยะทางของคุณอาจแตกต่างกันไป เป็นการดีที่สุดที่จะกำหนดค่าลักษณะการทำงานที่คุณต้องการอย่างชัดเจนหากคุณต้องการประสบการณ์ที่สอดคล้องกันในทุกแพลตฟอร์มและเวอร์ชันซอฟต์แวร์
Todd A. Jacobs

ฉันเชื่อว่าหมายความว่าคุณมีผู้จัดการคลิปบอร์ดเช่น klipper / glipper พวกเขาสามารถซิงโครไนซ์บัฟเฟอร์สองตัว มันไม่เปลี่ยนความจริงที่ว่ากลุ่มใช้*สำหรับ+การลงทะเบียนหลักและสำหรับคลิปบอร์ด X11 คุณสามารถเห็นสิ่งนี้ได้ในแหล่งที่มาของ vim: ค่าเหล่านี้ถูกตั้งค่าไว้ที่นั่นและไม่เคยแก้ไขclip_starและclip_plusจะใช้*และ+ลงทะเบียนตามลำดับ
ZyX

41

สำหรับการกำหนดค่าของฉันนั้นใช้สำหรับการคัดลอกและวาง

" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa

คุณวางอะไรลง
StarWind0

IMHO นี้เป็นทางออกที่ดีกว่าที่จะตั้งค่า clibboard เป็นไม่มีชื่อ - ไม่ยุ่งกับคลิปบอร์ด OS ที่มีทุกการกระทำ x / dd / y และสำหรับ Mac อาจเป็นความคิดที่ดีกว่าในการเปลี่ยนตัวปรับ C (ctrl) เป็น D สำหรับการจับคู่ชุด cmd + c / x / v
mindex

34

นี่จะเป็นบรรทัดที่คุณต้องการใน vimrc ของคุณเพื่อจุดประสงค์นี้:

set clipboard+=unnamed  " use the clipboards of vim and win
set paste               " Paste from a windows or from vim
set go+=a               " Visual selection automatically copied to the clipboard

2
ฉันชอบทางออกของคุณ ฉันต้องการคำอธิบายที่ดีกว่า
Zhon

ยอดเยี่ยม การใช้รีจิสเตอร์ทำให้ฉันลังเลและต้องคิดเสมอ นี่มันดีกว่ามาก
JonnyRaa

เวอร์ชันเสียงเรียกเข้าของฉันมี + คลิปบอร์ดและตัวเลือกนี้ใช้ไม่ได้สำหรับฉัน ฉันใช้ Byobu (ซึ่งใช้ Tmux ใต้ฝากระโปรง)
GGhe

ฉันต้องเพิ่มชุดคลิปบอร์ด + = unnamedplus สำหรับ Fedora
hakunin

29

ฉันเชื่อว่าคำถามนี้ควรได้รับคำตอบที่เป็นวัตถุประสงค์และมีกราฟิกมากขึ้น:

เข้าสู่โหมดวาง

  • ESC
  • : set paste
  • กด i
  • SHIFT+ Insert(พร้อมข้อความคัดลอกบนคลิปบอร์ดของคุณ)


ออกจากโหมดการวาง

  • ESC
  • : ตั้ง nopaste
  • กด i

คุณวางข้อความและคุณสามารถพิมพ์อีกครั้ง


1
ฉันได้รับสิ่งนี้เพื่อทำงาน แต่:set nopasteไม่ทำอะไรเลย มันควรจะทำอะไร? ทำไมฉันต้องการมัน
Marko Avlijaš

1
ที่จริงมันก็เป็นเช่นนั้น เมื่อคุณดำเนินการ:set nopasteคุณกำลังบอกบรรณาธิการว่าคุณไม่ต้องการวางอีกต่อไป และเมื่อคุณกดiคุณจะกลับไปที่โหมดแก้ไข :)
ivanleoncz

2
เพื่อซื่อสัตย์กับคุณมาร์โคฉันไม่รู้
ivanleoncz

1
SHIFT + Insert ทำให้ฉันด้วยขอบคุณ!
Melissa Loos

1
สิ่งนี้ได้ผลเหมือนมนต์เสน่ห์สำหรับฉัน ทุกครั้งที่ฉันกลับมาเป็นกลุ่มฉันมักจะต้องมีลักษณะเช่นนี้
benjaminadk

17

คลิปบอร์ด

มีการลงทะเบียนพิเศษสำหรับจัดเก็บการเลือกนี้เป็น "* register ไม่มีอะไรใส่ที่นี่ยกเว้นข้อมูลเกี่ยวกับข้อความที่เลือกจะเปลี่ยน (เช่นด้วยการคลิกเมาส์ซ้ายที่อื่น) หรือเมื่อต้องการให้แอปพลิเคชันอื่นต้องการ วางข้อความที่เลือกจากนั้นข้อความจะถูกใส่ใน "* register ตัวอย่างเช่นหากต้องการตัดเส้นและทำให้เป็นตัวเลือกปัจจุบัน / วางไว้บน CLIPBOARD:

    "*dd

เมื่อคุณต้องการวางสิ่งที่เลือกจากแอปพลิเคชันอื่นเช่นโดยการคลิกปุ่มกลางของเมาส์การเลือกจะถูกใส่ใน "* register ก่อนจากนั้น" ใส่ 'เหมือนกับการลงทะเบียนอื่น ๆ ตัวอย่างเช่นการเลือก (เนื้อหาของคลิปบอร์ด):

    "*p

ลงทะเบียน E354

> There are nine types of registers:                      
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~ 
> 8. The black hole register "_
> 9. Last search pattern register "/

วางจากคลิปบอร์ด

1. Clipboard: Copy
2. Vim insertmode, middle mouse key

ตรวจสอบการรองรับคลิปบอร์ด X11 ในเทอร์มินัล

เมื่อคุณต้องการเรียกใช้ Vim ในเทอร์มินัลคุณจะต้องค้นหา Vim เวอร์ชันที่คอมไพล์ด้วยการสนับสนุนคลิปบอร์ด ตรวจสอบการสนับสนุน X11-clipboard จากคอนโซลประเภท:

% vim --version

หากคุณเห็น "+ xterm_clipboard" คุณก็พร้อมที่จะไป

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

เซิร์ฟเวอร์ X เก็บรักษาตัวเลือกสามตัวที่เรียกว่า:

ประถมศึกษามัธยมศึกษาและคลิปบอร์ด

การเลือกหลักถูกใช้ตามอัตภาพเพื่อใช้ในการคัดลอกและวางผ่านปุ่มกลางของเมาส์ การเลือก SECONDARY และ CLIPBOARD ใช้บ่อยกว่าโดยแอปพลิเคชันโปรแกรม

http://linux.die.net/man/1/xsel


12

ฉันลองใช้คำแนะนำด้านบนและไม่มีใครทำงานในสภาพแวดล้อมของฉัน (Windows PuTTY โคลนมากกว่า ssh)

googling เพิ่มเติมบางส่วนปรากฏขึ้น: /unix/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard

หนึ่งในความคิดเห็นที่แนะนำให้ใช้SHIFT+INSERTซึ่งทำเคล็ดลับสำหรับการวางจากคลิปบอร์ดของเดสก์ท็อปลงในบัฟเฟอร์ของ Vim Ctrl-Cกำลังทำงานเพื่อคัดลอกไปยังคลิปบอร์ดของเดสก์ท็อปจาก Vim


2
ฉันกำลังทำงานเป็นเครื่องมือภายใน cmder เครื่องมือ [windows 8.1] เมื่อคุณเข้าไปในการตั้งค่า cmder> คีย์และมาโคร> paste ฉันได้รับคำสั่ง shift + insert สำหรับ multiline paste และ ctrl + v สำหรับการวางบรรทัดเดียว
Zubair Alam

1
สำหรับฉันการคลิกขวาง่าย ๆ เป็นเหมือนเสน่ห์ !! เพียงคลิกขวา!
Fr0zenFyr

2
เนื่องจากคุณกำลังใช้เทอร์มินัลและ ssh vim ไม่สามารถเข้าถึงคลิปบอร์ดของระบบของคุณผ่าน SSL SHIFT+INSERTทำงานได้เนื่องจากเป็นตัวเลือกการวางสำหรับเทอร์มินัลของคุณ (หรือในกรณีของคุณ PuTTY) อย่างไรก็ตามการเยื้องอาจจะผิด ตรวจสอบคำตอบสุดท้ายของฉันเกี่ยวกับpasteตัวเลือกเพื่อแก้ไขปัญหานี้
คอนเนอร์

1
@jinksPadlock ขอบคุณ .. ใช่ .. ฉันสามารถคัดลอก / วางโดยใช้เมาส์ได้พยายามหาวิธีการทำได้โดยใช้ "แป้นพิมพ์เท่านั้น" การคัดลอกจาก windows ไปยัง VIM นั้นเป็นไปได้โดยใช้แป้นพิมพ์อย่างเดียวโดยใช้ Putty แต่ไม่ใช่ในทิศทางตรงกันข้าม ในทุบตีสำหรับ windows .. มันเป็นไปไม่ได้ที่จะทำเช่นนั้นในทิศทางใด ATM รวบรวมรายชื่อแหล่งข้อมูลเพื่อชี้ผู้คนไปในทิศทางที่ถูกต้องและสำหรับเรา .. หากคุณมีอะไรที่จะเพิ่ม .. อาจคุณสามารถเพิ่มพวกเขาได้ที่นี่: stackoverflow.com/questions/45271895/…
alpha_989

1
@ alpha_989 ในภายหลังดีกว่าไม่เคย;) ฉันไม่สามารถเพิ่มไปยัง jinksPadlock 'เนื่องจากฉันไม่มี Windows OS ภายใต้มือของฉัน SHIFT+INSทำงานได้จากโฮสต์ของ linux ไปยัง ssh vim รวมถึง mouse คลิกที่สาม
tuk0z

10

ไม่มีคลิปบอร์ด + ดังนั้นฉันจึงคิดวิธีอื่นโดยใช้ xsel:

เพิ่มใน ~ / .vimrc ของคุณ:

vnoremap <C-C> :w !xsel -b<CR><CR>


1
ขอบคุณสำหรับความคิดที่ยอดเยี่ยม! ฉันลงเอยด้วยการใช้:vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
andy

6

บันทึกย่อแบบด่วนสำหรับผู้ที่ติดตั้ง vim ไม่สนับสนุนการลงทะเบียน * และ + ไม่จำเป็นต้องดาวน์โหลดการติดตั้งเป็นกลุ่มใหม่เพื่อวางจากคลิปบอร์ด นี่คือวิธีการทางเลือก:

1) ติดตั้ง parcellite (ผู้จัดการคลิปบอร์ดที่มีหน่วยความจำเหลือน้อย);

2) ในไฟล์. vimrc ของคุณเพิ่มสิ่งต่อไปนี้:

command Clip r !parcellite -c

3) เริ่ม vim

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


4

สิ่งนี้ใช้ได้กับฉัน: Ctrl+ Shift+V


3
@ คำตอบของ neel ได้ระบุไว้ในที่นี้แล้ว นี่ควรเป็นความคิดเห็นหรือโหวตได้ดีกว่าหากคุณต้องการบอกว่ามันใช้งานได้
ericbn

3

ทางออกที่ง่ายที่สุดสำหรับสิ่งนี้ซึ่งทำงานระหว่างเครื่อง Linux ต่าง ๆ ผ่านsshคือ:

  1. ตรวจสอบว่าเป็นกลุ่มรองรับคลิปบอร์ด X-11: vim --version | grep clipboardคลิปบอร์ด: ถ้ารายงานกลับมา-clipboardและ-xterm_clipboardคุณควรติดตั้งvim-gtkหรือvim-gnome(gvim บน arch linux)

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

set clipboard=unnamedplus
set paste
  1. หากคุณเข้าสู่ระบบในเครื่องอื่นผ่านทาง ssh ใช้ตัวเลือก -Y: ssh -Y machine

ตอนนี้การคัดลอกและวางควรทำงานอย่างที่คาดไว้ในเครื่องเดียวและในเครื่องที่แตกต่างกันโดยใช้yสำหรับการดึงและpวางเท่านั้น หมายเหตุแก้ไข.vimrcในเครื่องทั้งหมดที่คุณต้องการใช้คุณสมบัตินี้


ฉันคิดว่าเซิร์ฟเวอร์ X ควรมีอยู่ในเซิร์ฟเวอร์ด้วยเพื่อให้ใช้งานได้ ใช่ มันอาจถูกติดตั้งโดย vim-gtk ฉันคิดว่า xvfb จะเป็นตัวเลือกอื่นสำหรับการเรียกใช้เซิร์ฟเวอร์ X
Ajeeb.KP

3

ฉันพบปัญหานี้ในช่วงกลางปี ​​2017 Macbook Pro ที่ทำงานvimอยู่iTerm2ในสภาพแวดล้อมการพัฒนาหลักของฉัน

ตามคำแนะนำอื่น ๆ ฉันแนะนำvim --versionและพบว่ามันกลับมา-clipboardมาซึ่งหมายความว่าเวอร์ชั่นvimที่มาพร้อมกับเครื่องของฉันไม่ได้ถูกคอมไพล์ด้วยตัวเลือกคลิปบอร์ด

homebrewแพคเกจสำหรับการvimปรากฏขึ้นเพื่อรวบรวมกับclipboardตัวเลือกเพื่อแก้ไขสำหรับฉันคือการไปที่:

  1. วิ่ง brew install vim
  2. เพิ่มset clipboard+=unnamedของฉัน~/.vimrcไฟล์
  3. ปิดและเปิดใหม่ iTerm2

3

คัดลอกไปยังคลิปบอร์ดของระบบปฏิบัติการ

เลือกข้อความในโหมดภาพกด "*y

วางจากคลิปบอร์ดของระบบปฏิบัติการ

กด "*p


2

ตามจากคำตอบของ Conner ซึ่งยอดเยี่ยม แต่C-R C-p + และC-R C-p *ในโหมดแทรกนั้นไม่สะดวก เหมือนกัน"*pและ"+pจากโหมดคำสั่ง

กูรู VIM แนะนำต่อไปนี้เพื่อแม็พC-vกับสิ่งที่C-r C-p +ทำ

คุณสามารถมี :inoremap <C-v> <C-o>"+pโหมดแทรกได้เท่านั้น

ถ้าคุณต้องการที่จะแทนที่โหมดภาพแบบทวนเข็มนาฬิกา (ไม่แนะนำให้เขาเพราะโหมดภาพเป็นสิ่งที่ดี) คุณอาจมี map <C-v> "+p


2

หากคุณใช้ vim ใน MAC OSX แต่น่าเสียดายที่มันมาพร้อม verion รุ่นเก่าและไม่ได้ปฏิบัติตามตัวเลือกคลิปบอร์ด โชคดีที่ homebrew สามารถแก้ปัญหานี้ได้อย่างง่ายดาย

ติดตั้งเป็นกลุ่ม:

brew install vim --with-lua --with-override-system-vim

ติดตั้ง guion verim เป็นกลุ่ม:

brew install macvim --with-lua --with-override-system-vim

รีสตาร์ทเครื่องเพื่อให้มีผล


ผนวกบรรทัดต่อไปนี้ไปที่ ~/.vimrc
set clipboard=unnamed

ตอนนี้คุณสามารถคัดลอกบรรทัดเป็นกลุ่มด้วยyyและวางทั้งระบบ


2

หากคุณใช้เมาส์ก่อน

 :set paste 

จากนั้นright click mouseและเนื้อหาในบัฟเฟอร์จะถูกวาง


1

ด้านบนของการตั้งค่า:set clipboard=unnamedคุณควรใช้mvim -vสิ่งที่คุณสามารถทำได้brew install macvimหากคุณใช้ vim บน Terminal.app บน Mac OS X 10.9 กลุ่มเริ่มต้นไม่รองรับตัวเลือกคลิปบอร์ด


1

มันอาจจะคุ้มค่าที่จะกล่าวถึงบน OSX โดยใช้ Vim คุณสามารถเลือกข้อความด้วยเมาส์ Cmd-C เพื่อคัดลอกไปยังคลิปบอร์ดระบบ OSX และข้อความที่คัดลอกจะมีอยู่ในคลิปบอร์ดด้านนอกของ Vim

กล่าวอีกนัยหนึ่ง OSX ปฏิบัติต่อเหมือนเป็นหน้าต่างปกติและนี่คือที่ปุ่ม "Command" ของ Apple ที่มีความร้ายกาจมากมีประโยชน์

B-30


1
สิ่งนี้ยังเป็นจริงสำหรับเทอร์มินัลอีมูเลเตอร์ครึ่งที่เหมาะสมบน OS อื่น ๆ Apple ไม่มีข้อได้เปรียบตรงนี้
underscore_d

1

จาก @ lis2 คำตอบฉันใช้การกำหนดค่าที่ง่ายกว่าซึ่งจะไม่บังคับให้ใช้โหมดแทรกในตอนท้าย:

" Copy and paste
if has('clipboard') && !has('gui_running')
  vnoremap <C-c> "+y
  vnoremap <C-x> "+d
  vnoremap <C-v> "+p
  inoremap <C-v> <C-r><C-o>+
endif

โปรดทราบว่าการแทนที่การแมป Vim เริ่มต้นเหล่านี้ทั้งหมด:

  • v_CTRL-C: หยุดโหมดภาพ
  • v_CTRL-X: ลบ [นับ] จากจำนวน
  • v_CTRL-V: โหมดภาพบล็อก
  • i_CTRL-V: ใส่ตัวเลขที่ไม่ใช่ดิจิตตัวถัดไปซึ่งถูกแมปด้วย i_CTRL-Q

เป็นทางเลือกหนึ่งที่สามารถใช้ปุ่มแรงบันดาลใจใน "งัด", "ลบ" และ "ใส่" คำกริยาที่เป็นกลุ่ม: <C-y>, <C-d>และ<C-p>ตามลำดับ สิ่งเหล่านี้จะแทนที่การแมปเริ่มต้นเดียวเท่านั้น:

  • i_CTRL-P: คำค้นหาย้อนหลังเพื่อความสมบูรณ์

1

โซลูชันอื่น ๆ นั้นดีถ้าคุณต้องการเปลี่ยน vimrc ของคุณ ฯลฯ ... อย่างไรก็ตามฉันต้องการวิธีง่ายๆในการคัดลอกจาก vim ไปยังแป้นพิมพ์ระบบของฉัน นี่คือสิ่งที่ฉันมาด้วย

  • เลือกข้อความที่คุณต้องการคัดลอกด้วยโหมดภาพ v
  • กด:(จะขยายโดยอัตโนมัติเพื่อแสดง:'<,'>)
  • พิมพ์y * หรือ y + (ขึ้นอยู่กับระบบของคุณ) เพื่อดึงข้อความที่เลือกไปยังคลิปบอร์ดของระบบ

1

สิ่งที่คุณต้องการจริงๆคือEasyClip มันจะทำอย่างนั้นและอีกมากมาย ...


1

ตั้งแต่vim 8คลิกขวาเปิดใช้งานโหมดภาพโดยค่าเริ่มต้น วิธีนี้ป้องกันการคัดลอกและวาง "ปกติ" (เรียกว่า "ข้อบกพร่องจากการออกแบบ" https://github.com/vim/vim/issues/1326 ) แก้ไขด้วยการทำ:

echo "set mouse-=a" >> ~/.vimrc .

ออกและเริ่มต้นเป็นกลุ่ม


1

ด้วย Vim 8+ บน Linux หรือ Mac ตอนนี้คุณสามารถใช้ native paste ของระบบปฏิบัติการ ( ctrl+shift+Vบน Linux, cmd+Vบน Mac) อย่ากดiสำหรับโหมดแทรก

มันจะวางเนื้อหาของคลิปบอร์ด OS ของคุณรักษาช่องว่างและแท็บโดยไม่ต้องเพิ่มการใส่ข้อความอัตโนมัติ มันเทียบเท่ากับเก่า:set paste, i, ctrl+shift+V, esc, :set nopasteวิธีการ

คุณไม่จำเป็นต้องมีคุณสมบัติ+clipboardหรือ+xterm_clipboardเป็นกลุ่มติดตั้งอีกต่อไป คุณสมบัตินี้เรียกว่า "pasteed paste" สำหรับรายละเอียดเพิ่มเติมให้ดูที่การปิดการเยื้องอัตโนมัติเมื่อวางข้อความในกลุ่ม


0

เมื่อฉันใช้ Debian vim ที่ไม่ได้รวมกับ Gnome (vim --version | grep clip # แสดงการสนับสนุนคลิปบอร์ดไม่มี) ฉันสามารถคัดลอกไปยังคลิปบอร์ดหลังจากกดปุ่ม Shift ค้างไว้และเลือกข้อความด้วยเมาส์เหมือนกับใด ๆ โปรแกรมคำสาปอื่น ๆ เมื่อฉันคิดจากความคิดเห็นโดย @Conner มันเป็นเทอร์มินัล (คำพังเพยในเทอร์มินัลในกรณีของฉัน) ที่ปิดการรายงานเหตุการณ์เมาส์เมื่อรู้สึกกด Shift ของฉัน ฉันเดาว่าโปรแกรมที่ใช้คำสาปสามารถรับเหตุการณ์ของเมาส์ได้หลังจากส่งลำดับ Escape ที่แน่นอนไปยังเทอร์มินัล


1
นี่คือการใช้ terminal ของคุณไม่เป็นกลุ่ม
คอนเนอร์

0

หากคุณอยู่บน windows และคุณต้องการวางเนื้อหาของคลิปบอร์ดระบบโดยใช้ให้pพิมพ์คำสั่งนี้

:set clipboard = unnamed

นี่เป็นการแก้ไขปัญหาของฉัน


0

มีสองวิธีง่ายๆในการทำเช่นนี้ ทำให้ไฟล์ของคุณอยู่ในโหมดแทรกและ 1) กดปุ่มกลาง (ล้อเลื่อน) ในเมาส์ของคุณหรือ 2) Ctrl + Shift + V


0

สำหรับคีย์บอร์ดนานาชาติบางอย่างที่คุณอาจจำเป็นต้องกด"+ ที่จะได้รับSpace"

ดังนั้นในกรณีเหล่านั้นคุณจะต้องกด"Space+yหรือ"Space*yคัดลอก

และ"Space+pหรือ" Space*pเพื่อวาง


0

ฉันใช้คำตอบของ NM Pennypacker และติดตั้ง vim ผ่าน homebrew ในช่วงต้นปี 2011 MacBook Pro:

brew install vim

ตอนนี้ฉันยังสามารถใช้ "* register เพื่อคัดลอกและวางข้อความภายในเสียงเรียกเข้าฉันยังไม่ต้องเปลี่ยนบางอย่างในไฟล์ ~ / .vimrc หรือ $ PATH ของฉัน Homebrew เพิ่ม symlink ใน / usr / local / bin เช่น เป็นกลุ่ม -> ../Cellar/vim/8.1.2350/bin/vim

ทางเลือกซึ่งเคยทำมาก่อนคือการคัดลอกข้อความบางบรรทัดภายในกลุ่มด้วยการทำเครื่องหมายด้วยเมาส์และใช้การคัดลอกและวาง (cmd + c, cmd + v) บน mac ตัวเลือกนี้จะทำงานเฉพาะเมื่อข้อความที่คุณต้องการคัดลอกและวางมีขนาดน้อยกว่าขนาดหน้าต่างของกลุ่ม หากคุณต้องการคัดลอกข้อความทั้งหมดภายในเสียงเรียกเข้าโดยทำเครื่องหมายทั้งหน้าต่างหรือใช้ cmd + a สิ่งนี้จะคัดลอกส่วนอื่น ๆ ของคอนโซลเขียนก่อนเริ่มเสียงเรียกเข้าซึ่งน่ารำคาญมาก

ดังนั้นฉันดีใจที่พบวิธีการใหม่โดยใช้ clippboard register

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