วิธีคัดลอกเนื้อหาวางในเครื่องมือแก้ไข vi


165

ฉันลองใช้Ctrl+ Vสำหรับการวางเนื้อหาในเอกสารตัวแก้ไข vi แต่Ctrl+ Vไม่ถูกตีความว่าเป็นการวาง


16
แค่ทราบเหตุผลหลักในการใช้ Vi ก็คือเพราะไม่ได้ติดตั้ง Vim หากคุณมีการติดตั้งเป็นกลุ่มมันอาจจะคุ้มค่าที่จะใช้สิ่งนั้นแทน ไม่มีประโยชน์ใด ๆ กับ Vi นอกเหนือจากที่มีอยู่ในการติดตั้ง Unix ทุกครั้ง วิธีที่ดีที่สุดที่จะเรียนรู้เป็นกลุ่มในความคิดของฉันคือการเปิดจำลอง terminal ของคุณ (ไม่ได้มาจากภายในกลุ่ม) และพิมพ์vimtutorมันคุณจะได้รับขึ้นอยู่กับความเร็วในการที่มันสามารถใช้งานได้ให้กับคุณในประมาณ 45 นาที
Ben Mordecai

1
+1 @BenMordecai - ฉันคุ้นเคยกับ vi (จากเก่า) รวมถึงความสามารถของ sub-shell ที่สะดวก แต่ต้องการการฟื้นฟูใหม่ เยี่ยมหน่อยจากการติว ผ่านมันเหมือนสายลม ขอบคุณ
Cbhihe

คำตอบ:


192

ขั้นแรกตรวจสอบให้แน่ใจว่าคุณอยู่ในโหมดแก้ไข (กดi) จากนั้นคุณสามารถวางด้วยCtrl+ Shift+ Vหากคุณอยู่ในโปรแกรมจำลองเทอร์มินัลเช่นgnome-terminal(หรือเลือก "วาง" จากเมนูคลิกขวา)

คุณยังสามารถพิมพ์:set pasteเป็นกลุ่มก่อนที่คุณจะวางเพื่อปิดการเยื้องอัตโนมัติ ฯลฯ จากนั้น:set nopasteหลังจากที่คุณวางเนื้อหาแล้ว

ตรวจสอบคำถามนี้ใน stackoverflow.com เพื่อรับข้อมูลเพิ่มเติม

หากคุณต้องการคัดลอก / วางบรรทัดในvim(ตรงข้ามกับการวางเนื้อหาคลิปบอร์ด) คุณจะต้องตรวจสอบคำสั่งyank นี่คือแผ่นโกงที่อาจช่วยได้


1
ฉันคิดว่าถ้าคุณมีเคอร์เซอร์เมาส์คุณจะไม่สามารถวางโดยใช้ Ctrl + Shift + V
Alvin Wong

14
เพียงแค่ทราบว่าIเป็นกรณี ๆ ไป ตัวพิมพ์เล็กiเป็นวิธีปกติของการเข้าสู่โหมดแทรก Capital Iนำเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดจากนั้นเข้าสู่โหมดแทรก
Ben Mordecai

64

Vi (และ Vim) ทำงานแตกต่างกันมากเมื่อเทียบกับโปรแกรมแก้ไขข้อความทั่วไปเช่น Gedit นอกจากนี้ยังมีช่วงการเรียนรู้ที่ค่อนข้างสูงชัน หากคุณต้องการเรียนรู้คำสั่งพื้นฐานเริ่มต้นด้วยบทช่วยสอนเชิงโต้ตอบนี้

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


3
นี่คือสิ่งที่ฉันไม่เคยรู้มาก่อน นอกจากนี้ +1 สำหรับการเชื่อมโยงเป็นอีกหนึ่งกวดวิชาที่น่ากลัว
อัตติลาโอ

19
การพูดของเส้นโค้งการเรียนรู้สำหรับบรรณาธิการมี "เส้นโค้งการเรียนรู้ที่คลาสสิกสำหรับบรรณาธิการบางอย่างร่วมกัน" blog.thilelli.net/public/store/attached/curves.jpg
hlovdal

ในเทอร์มินัล GNOME ทางลัดสำหรับการคัดลอกและวางคือ Ctrl-Shift-C และ Ctrl-Shift-V ตามลำดับ
Flimm

1
ฉันพยายามกด <kbd> "</kbd>, <kbd> + </kbd> และ <kbd> p </kbd>, </kbd>, <kbd>" </kbd> และ <kbd> p < / kbd> และไม่มีอะไรเกิดขึ้น ฉันทำอะไรผิด ฉันใช้viไม่ได้vim
user907860

1
นั่นคือคำตอบที่ถูกต้อง ใช้เช่น Ctrl-Shift-v จะทำงานกับเนื้อหาที่ง่ายที่สุดเท่านั้น (ตัวแบ่งบรรทัดและการเยื้องอาจผิดพลาดได้จริงถ้าคุณอยู่ในเครื่องและคุณลืมที่จะใช้set :paste)
rsenna

29
  1. หากคุณต้องการคัดลอกเนื้อหาวางภายในไฟล์เดียวกันใช้และyankpaste

  2. หากคุณต้องการคัดลอกเนื้อหาการวางข้ามเทอร์มินัลให้เปิดไฟล์แรกแล้วทำการโยนข้อความที่คุณต้องการจากนั้นเปิดไฟล์ที่สองของคุณภายในกลุ่ม (เช่น:tabnew /path/to/second/file) แล้วกดpเพื่อวาง

  3. หากคุณต้องการคัดลอกเนื้อหาที่แปะจาก vim ไปยังโปรแกรมภายนอกคุณจะต้องเข้าถึงคลิปบอร์ดของระบบ ฉันถือว่าคุณใช้ Ubuntu เวอร์ชัน GUI ของ vim จะรองรับคลิปบอร์ดเสมออย่างไรก็ตามหากคุณต้องการใช้ Vim จากเทอร์มินัลคุณจะต้องตรวจสอบการรองรับ X11-clipboard

    จากคอนโซลพิมพ์:

    $ vim --version | grep xterm
    

    หากคุณพบ-xterm_clipboardคุณมีสองตัวเลือก:

    1) รวบรวมเสียงเรียกเข้าของคุณเองโดยเปิด xterm_clipboard

    2) ถอนการติดตั้ง vim, ติดตั้งgvim (vim-gtk หรือ vim-gnome) แทน คุณสามารถใช้ vim ที่ไม่ใช่ gui ได้โดยการเรียก vim จากเทอร์มินัลเช่นเดียวกับที่คุณเคยทำมาก่อน คราวนี้เมื่อคุณตรวจสอบคุณควรจะหา+ xterm_clipborad

    ตอนนี้เมื่อคุณงัดข้อความบางส่วนใน + ลงทะเบียนภายในแก้ไขเป็นกลุ่ม (เช่น "+ yy) ก็ยังได้รับการคัดลอกไปยังคลิปบอร์ดของระบบซึ่งคุณสามารถดึงข้อมูลจากโปรแกรมภายนอกของคุณเช่นบรรณาธิการ Gedit โดยใช้+CtrlV

  4. หากคุณต้องการคัดลอกเนื้อหาวางจากโปรแกรมภายนอกเข้ามาเป็นกลุ่มแรกคัดลอกข้อความของคุณลงในคลิปบอร์ดระบบผ่านCtrl+ Cแล้วในการแก้ไขเป็นกลุ่มโหมดแทรกให้คลิกที่ปุ่มกลางของเมาส์ (มักจะล้อ) หรือกดCtrl+ Shift+ Vเพื่อวาง

    นี่คือเงื่อนไขการคัดลอกและวางพื้นฐาน 4 ประการที่เกี่ยวข้องกับเสียงเรียกเข้า ฉันหวังว่านี่จะช่วยได้.


จุด: tabnew / path / to / second / file คืออะไร คุณสามารถบรรลุสิ่งเดียวกันที่แน่นอน yanking / คัดลอก / ตัดในไฟล์แรกเปิดไฟล์ที่สองด้วย: vi / เส้นทาง / ถึง / วินาที / ไฟล์และวาง (p / P) ในมัน อย่างน้อยในกรณีของฉัน ... หรือเป็นเพราะฉันเปิดใช้งานคุณลักษณะ + xterm_clipboard vim อยู่หรือไม่ หรือจะมีมากกว่าแท็บมากกว่าแค่นั้น?
Cbhihe

1
บน Ubuntu vim-gtkได้xterm_clipboardรับการสนับสนุนและบน Fedora xvimก็มี
icc97

18

ฉันมักจะใช้Shift+ Insertเมื่อฉันต้องการวางข้อความในเทอร์มินัลทำงานในโปรแกรมเทอร์มินัลทั้งหมด

(ซึ่งเป็นเหตุผลที่ฉันไม่เคยซื้อแล็ปท็อปที่คุณไม่สามารถกดได้Insertโดยไม่ต้องกดคีย์รอง)


2
Vi/ Vim! = terminal;)
0xC0000022L

1
ตกลงตกลง แต่ก็ยังใช้งานได้ :)
Magnus Jonsson

+1 สำหรับ .. นี้สิ่งใดที่คุณใช้ในการดำเนินการพูดCtrl+A, Ctrl+Cยัง?
Arup Rakshit

ถ้าฉันใช้เทอร์มินัลภายใน DE ฉันมักจะเลือกข้อความด้วยเมาส์และคัดลอกด้วย Ctrl + Shift + C
Magnus Jonsson

Shift + Insert ยังทำงานใน gvim (ฉันใช้ Ubuntu 13.10 หากที่ทำให้แตกต่างใด ๆ .)
eksortso

10

ใช้ปุ่มกลางของเมาส์เพื่อแทรกข้อความที่คุณไฮไลต์ไว้ที่อื่น

มันจะมีประโยชน์เมื่อคุณไม่สามารถเข้าถึงคลิปบอร์ดระบบของคุณ (ตัวอย่างเช่นในเซสชัน SSH ระยะไกล)

ต้องอยู่ในโหมดแก้ไข / แทรกสำหรับ Vim


6

เมื่อคุณป้อน vi กดiเพื่อเข้าสู่โหมดแทรกคลิกขวาที่เทอร์มินัลคลิกวาง


iผมคิดว่าเป็นกรณีที่ต่ำกว่า ตัวพิมพ์ใหญ่Iทำอะไร
Flimm

@Flimm ที่ได้อธิบายไปแล้วในความคิดเห็นโดย Ben Mordecai สำหรับคำตอบอื่น
sierrasdetandil

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

5

คำแนะนำโดยละเอียดเพื่อคัดลอก / วางบรรทัดข้อความใน vi โดยใช้yankและput

(ใช้สิ่งต่อไปนี้ในโหมดคำสั่งของ vi)

คัดลอก (YANK)

ในการคัดลอกหนึ่งบรรทัดใน vi:

  • ในโหมดคำสั่งเลื่อนเคอร์เซอร์ไปที่บรรทัดที่ต้องคัดลอกแล้วพิมพ์yyหรือพิมพ์Y

ในการคัดลอก 2 บรรทัดใน vi:

  • ในโหมดคำสั่งเลื่อนเคอร์เซอร์ไปที่บรรทัดแรกที่ต้องคัดลอกแล้วพิมพ์2yyหรือพิมพ์2Y

(เช่นเดียวกันสามารถคัดลอกบรรทัดจำนวนเท่าใดก็ได้)

ในการคัดลอกทุกบรรทัดจากตำแหน่งปัจจุบันไปยังจุดสิ้นสุดของไฟล์:

  • ในโหมดคำสั่งเลื่อนเคอร์เซอร์ไปที่บรรทัดแรกที่ต้องคัดลอกและพิมพ์ yG

หากต้องการคัดลอกข้อความทั้งหมดจากตำแหน่งปัจจุบันไปยังจุดสิ้นสุดของคำปัจจุบัน:

  • ในโหมดคำสั่งเลื่อนเคอร์เซอร์ไปยังตำแหน่งที่ต้องการคัดลอกและพิมพ์ข้อความ yw

หากต้องการคัดลอกข้อความทั้งหมดจากตำแหน่งปัจจุบันไปยังจุดสิ้นสุดของบรรทัด:

  • ในโหมดคำสั่งเลื่อนเคอร์เซอร์ไปยังตำแหน่งที่ต้องการคัดลอกและพิมพ์ข้อความ y$

แปะ (PUT)

วิธีวางข้อความในคลิปบอร์ด - หลังตำแหน่งเคอร์เซอร์:

  • ในโหมดคำสั่งพิมพ์ p

วิธีวางข้อความในคลิปบอร์ด - หน้าตำแหน่งเคอร์เซอร์:

  • ในโหมดคำสั่งพิมพ์ P

1

ฉันมีปัญหาเนื่องจากการติดตั้ง Vim ของฉันไม่รองรับคลิปบอร์ด :

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

ฉันติดตั้ง vim-gnome (ซึ่งรองรับคลิปบอร์ด) จากนั้นตรวจสอบอีกครั้ง:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

ตอนนี้ฉันสามารถคัดลอกและวางโดยใช้ "+ y และ" + p ตามลำดับ


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

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" สำหรับรายละเอียดเพิ่มเติมดูhttps://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763


นั่นคือคำตอบที่ฉันกำลังมองหา เนื่องจาก Vim ไม่ได้เป็นค่าเริ่มต้นบน gnu / linux distros จึงจำเป็นต้องติดตั้งแม้ใน Ubuntu นอกจากนี้ปุ่มขึ้นของ Vi ไม่ทำงานบน Ubuntu และไม่มีไฮไลต์
itsnotmyrealname


0

ฉันแค่อยากจะทราบว่าการใช้ Vim ผ่าน Git Bash บน Windows คุณสามารถใช้pหรือคลิกกลางเมาส์ได้โดยไม่ต้องอยู่ในโหมดแทรก ใช้ Vim ผ่านPuTTYคุณสามารถคลิกขวา การทำสำเนาและการเน้น

ฉันได้สังเกตสิ่งนี้เพราะฉันมาที่นี่โดยไม่เห็นว่านี่คือ SE สำหรับ Ubuntu

คำสั่งที่เป็นประโยชน์อื่น ๆ :

  • yy(# ของบรรทัด) - ดึง (คัดลอก)
  • dd(# ของบรรทัด) - ลบ
  • p - วางบรรทัดด้านล่างบรรทัดปัจจุบัน
  • Shift+ p- วางสายเหนือเส้นปัจจุบัน
  • u - เลิกทำ
  • r - ทำซ้ำ
  • i - โหมดแทรก
  • v - โหมดภาพ

ไม่ได้ผลสำหรับฉันบน Windows Git Bash คุณใช้คอนโซลไหนมินต์ตี้หรือ windows cmd?
wisbucky

ฉันเชื่อว่ามันมิ้นต์
Tyler Christian

0

คุณสามารถใช้Ctrl+ Shift+ Vเพื่อวางใน terminal เวอร์ชัน vim แต่สำหรับเวอร์ชัน GUI vim เช่นการNeovim-Qtวางข้อความจากคลิปบอร์ดของระบบที่มีCtrl+ Shift+ Vจะไม่ทำงาน คุณต้องเข้าถึงคลิปบอร์ด"+หรือ"*ในเครื่องมือแก้ไขเสียงเรียกเข้า

การเพิ่มปุ่มลัดเข้าใหม่.vimrcจะเป็นเพียงคำสั่งคัดลอก / วาง:

" paste from system clipboard, align indentation with surroundings
noremap <Leader>p "*]p:set nopaste<CR>
" copy a sentence into system clipboard
noremap <Leader>y "+y)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.