วิธีการตัด / คัดลอก / วางใน GVim บน Ubuntu ทำงานร่วมกับ Ctrl + X, Ctrl + C, Ctrl + V ได้อย่างไร


54

ตามค่าเริ่มต้นการตัด / คัดลอก / วางทางลัดใน GVim บน Ubuntu คือ:

 ตัด "+ x
 คัดลอก "+ y
 วาง "+ gP

ฉันต้องการใช้คอมโบควบคุมหลักใน GVim เช่นฉันใช้ใน Firefox และแอพพลิเคชั่นอื่น ๆ ของ gnome ฉันจะกำหนดค่า GVim ให้ทำงานเหมือนกับแอป Gnome อื่น ๆ ได้อย่างไร


เพื่อหลีกเลี่ยงความขัดแย้งกับคีย์ vim เริ่มต้นให้เลือก Ctrl + Shift + Key แทน Ctrl + Key
Sheharyar

คำตอบ:


50

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

source $VIMRUNTIME/mswin.vim
behave mswin

แต่ระวังโหมดภาพคือ CTRL-Q แทนที่จะเป็น CTRL-V

สำหรับภาพรวมสิ่งที่ mswin.vim ไม่เห็น sourcode mswin.vim มันเป็นความเห็นที่ดีมากและหากคำสั่งบางอย่างไม่ชัดเจนคุณสามารถค้นหาได้อย่างง่ายดายด้วยความช่วยเหลือของกลุ่ม

นี่คือภาพรวมอย่างรวดเร็วรวบรวมจากแหล่งที่มา:

  • backspace และปุ่มเคอร์เซอร์ตัดไปที่บรรทัดก่อนหน้า / ถัดไป
  • CTRL-X และ SHIFT-Del ถูกตัด
  • CTRL-C และ CTRL-Insert เป็นสำเนา
  • CTRL-V และ SHIFT-Insert คือ Paste
  • ใช้ CTRL-Q เพื่อทำสิ่งที่ CTRL-V ใช้ทำ
  • ใช้ CTRL-S เพื่อบันทึกในโหมดแทรกด้วย
  • CTRL-Z เลิกทำ; ไม่ได้อยู่ใน cmdline
  • CTRL-Y คือทำซ้ำ (แม้ว่าจะไม่ทำซ้ำ) ไม่ได้อยู่ใน cmdline
  • Alt-Space เป็นเมนูระบบ
  • CTRL-A คือเลือกทั้งหมด
  • CTRL-Tab เป็นหน้าต่างถัดไป
  • CTRL-F4 คือหน้าต่างปิด

ตามคำขอของ Nippysaurus: ฉันใส่ต่อไปนี้ใน. gvimrc เพื่อแสดง Ctrl-V นอกเหนือจากวางในเมนู:

unmenu! Edit.Paste
aunmenu Edit.Paste
nnoremenu 20.360 &Edit.&Paste<Tab>Ctrl-V        "+gP
cnoremenu    &Edit.&Paste<Tab>Ctrl-V        <C-R>+

ฉันไม่ได้ทดสอบอย่างละเอียดเพียงตรวจสอบอย่างรวดเร็วว่ามันเป็นไปตามที่ฉันคาด ใช้งานได้สำหรับฉันหวังว่าจะได้ผลกับคุณ ;-)


1
ฉันเข้าใจและซาบซึ้งถึงความคิดเห็นของ Manni และ Peter Thorin ในความคิดเห็นของคำตอบของ Peter Thorin สิ่งที่ฉันทำคือฉันเรียน GVim บน Windows เพื่อทดแทนแผ่นจดบันทึกและฉันต้องการแรงเสียดทานน้อยลง ขอบคุณ Ludwig
pcapademic

2
มีวิธีการเปลี่ยนข้อความทางลัดเมนูเพื่อให้ตรงกับปุ่มลัดใหม่หรือไม่?
Nippysaurus

@Nippysaurus: ฉันพยายามกับ menutrans ใน. gvimrc ไม่ได้รับมันในการทำงานจะต้องดูอีกที่มันในช่วงเย็น ...
Ludwig Weinzierl

2
ดูเหมือนว่าmswin.vimจะมีbehave mswinสายอยู่แล้ว ฉันจำเป็นต้องเรียกสิ่งนี้ด้วยตัวเองอีกครั้ง_vimrcหรือไม่?
นาธานเพื่อน

1
@NathanFriend Ditto มันใช้งานได้แม้ไม่มีbehave mswinอย่างน้อยในระบบของฉันด้วย Vim 8.0
Mikel

46

หากคุณต้องการตัด / คัดลอก / วางในการทำงานโดยใช้อง "มาตรฐาน" แต่คุณไม่ต้องการที่จะเปลี่ยนแปลงใด ๆ ของตัวเลือกการกำหนดค่าอื่นใน gvim ~/.vimrcพยายามจะเพิ่มต่อไปนี้

vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <C-r><C-o>+

วางทำงานในโหมดภาพและแทรกเท่านั้นดังนั้นคุณไม่ต้องกังวลเกี่ยวกับความขัดแย้งกับ Ctrl-V และโหมดภาพบล็อก นี่ไม่ใช่ปัญหาเนื่องจากการคัดลอกและตัดทำให้คุณเข้าสู่โหมดแทรกดังนั้นคุณสามารถวางในภายหลังได้ทันที หากคุณลองคุณจะพบว่ามันรู้สึกเป็นธรรมชาติอย่างสมบูรณ์

ฉันมากับการกำหนดค่านี้หลังจากการทำซ้ำหลายครั้งและฉันคิดว่าตอนนี้ "สมบูรณ์แบบ" แล้ว หากคุณยังไม่พอใจกับการกำหนดค่าการคัดลอก / วางปัจจุบันลองทำดูแล้วฉันจะพนันว่าคุณจะชอบ


นี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณ
Sean McCleary

2
หลังจากการทดลองและการปรึกษาหารือของ:help i_ctrl-r_ctrl-oฉันตัดสินใจที่จะเปลี่ยนimap <C-v> <ESC>"+paไปimap <C-v> <C-r><C-o>+; ทำงานได้ตามที่คาดไว้เมื่อเคอร์เซอร์อยู่ด้านซ้ายของอักขระตัวแรกของบรรทัดและจะเลียนแบบพฤติกรรม "มาตรฐาน" มากที่สุด
Holger

ฉันกำลังคิดที่<C-v>จะเปลี่ยน shift + insert ที่ดูเหมือนว่าจะเร็วขึ้นมากในเครื่องของฉัน แต่ในช่วงกลางของโปรเจ็กต์และไม่รู้สึกอยากเริ่มต้นเป็นกลุ่มตอนนี้ เพียงแค่แชร์
จะ

คุณยอดเยี่ยม =)
Yugal Jindle

9

หากคุณต้องการที่จะรักษาพฤติกรรมที่เป็นกลุ่มปกติ แต่ยังอนุญาตให้มีการใช้งานยุ่งยากน้อยกว่าของคลิปบอร์ดระบบดูเข้าถึงคลิปบอร์ดของระบบ หากคุณต้องการที่จะใช้ gvim คลิปบอร์ดระบบเป็นกันชนเริ่มต้น (เพื่อใด ๆx, y, pฯลฯ คำสั่งใช้คลิปบอร์ด) แล้วเพิ่มบรรทัดต่อไปนี้ vimrc ของคุณ:

set clipboard=unnamed

โดยส่วนตัวฉันใช้บัฟเฟอร์มากขึ้นภายในเสียงเรียกเข้ามากกว่าระหว่างเสียงเรียกเข้าและระบบ ดังนั้นฉันควรจะมีทางลัดที่ยุ่งยากกว่านี้เล็กน้อยกว่าจะให้คลิปบอร์ดระบบของฉันถูกบล็อกอย่างต่อเนื่อง แต่ก็ดีที่มีตัวเลือกสำหรับผู้ที่ต้องการมัน


2

ฉันคิดว่าคุณสามารถเพิ่มสิ่งนี้ได้ด้วยคำสั่ง: imap (ลองแค่ใช้ Ctrl + X ใน Windows ที่ใช้งานได้การกด ctrl + c ดูเหมือนว่าจะยกเลิกคำสั่งแม้ว่าดังนั้นคุณอาจต้องทำใน vimrc)

:imap <C-X> "+x
:imap <C-C> "+y 
:imap <C-V> "+gP

หากคุณเพิ่มลงใน ~ / .vimrc ของคุณคุณต้องลบ: หน้า imap

imap เพิ่มการผูกในโหมดแทรกเท่านั้นดังนั้นคุณอาจต้องการเปลี่ยนเป็นเพียงแมปหรืออย่างอื่น มองหา:help mapmodeเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการแมปและการแมปข้อมูล

โชคดี!


1
นี่ควรทำเคล็ดลับเล็กน้อย แต่มันเป็นความคิดที่ดีที่จะทำเช่นนั้น Ctrl-V ควรเข้าสู่โหมดภาพ Ctrl-C จะยกเลิกคำสั่งใด ๆ และเคล็ดลับนี้จะใช้ได้กับระบบของคุณเท่านั้น ในเครื่องอื่นคุณจะหายไป
innaM

1
ฉันเห็นด้วยส่วนหนึ่งว่าเป็นความคิดที่ไม่ดีฉันไม่ต้องการใช้ด้วยตนเอง แต่ถ้าคุณเป็นผู้ใช้ gvim ธรรมดาเท่านั้นคุณอาจจะไม่พลาดการผูกที่คุณลบอยู่ดี
Peter Thorin

1
ทำไมต้องใช้ gvim ตั้งแต่แรก? นานแค่ไหนที่คุณจะยังคงเป็นผู้ใช้ที่ไม่เป็นทางการ
innaM

2
ฉันไม่คิดว่ามันเป็นความคิดที่เลว ผู้คนคุ้นเคยกับ Ctrl + X และอื่น ๆ อีกหลายพันล้านเหตุผลอื่น ๆ ที่ใช้ vim
ลุดวิก Weinzierl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.