วางในโหมดแทรกหรือไม่


คำตอบ:


465

ในขณะที่อยู่ในโหมดแทรกโดน CTRL-R {register}

ตัวอย่าง:

  • CTRL-R * จะแทรกเนื้อหาของคลิปบอร์ด
  • CTRL-R " (การลงทะเบียนที่ไม่ระบุชื่อ) แทรกการลบหรืองัดล่าสุด

เพื่อหาสิ่งนี้ในประเภทช่วยเหลือของกลุ่ม :h i_ctrl-r


13
ใช่ฉันเพิ่งเรียนรู้จาก CTRL-R และมันมีประโยชน์มาก
Dan

16
CTRL-R *ใช้งานได้เฉพาะใน GVIM หรือรุ่นที่รวบรวมเพื่อโต้ตอบกับ x พิมพ์และมองหาvim --version +xterm_clipboardหากคุณไม่มีสิ่งนั้นคุณต้องมี vim เวอร์ชั่นอื่น ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
Conrad.Dean

10
คุณต้องการจริงๆเท่านั้น+clipboardแต่ถ้าคุณมี+xterm_clipboardคุณควรมีสิ่งนั้นต่อไป ในบางระบบปฏิบัติการxterm_clipboardไม่สามารถใช้ได้
แอนดรูมาร์แชลล์

1
อืมฉันใช้ C-r + เพื่อวางจากคลิปบอร์ดของระบบบน Windows (ใช้ GVim portable)? ไม่เคยได้ยิน * ลงทะเบียน
kitsu.eb

6
@ kitsu.eb บนระบบ X *register สามารถวางได้ด้วยการคลิกเมาส์กลางขณะ+ที่คัดลอก / วางแบบดั้งเดิม standards.freedesktop.org/clipboards-spec/clipboards-latest.txt
บบส.

235

:set pasteหากคุณไม่ต้องการเป็นกลุ่มที่จะฉีกรูปแบบในการเข้ามาข้อความที่วางคุณอาจต้องการพิจารณาใช้: วิธีนี้จะป้องกันไม่ให้ Vim ทำการแท็บรหัสของคุณอีกครั้ง เมื่อวางเสร็จแล้ว:set nopasteจะกลับสู่พฤติกรรมปกติ

นอกจากนี้ยังเป็นไปได้ที่จะสลับโหมดด้วยปุ่มเดียวโดยเพิ่มบางสิ่งบางอย่างเช่นset pastetoggle=<F2>. vimrc ของคุณ รายละเอียดเพิ่มเติมเกี่ยวกับการสลับอัตโนมัติเยื้องอยู่ที่นี่


47
:set nopasteจะปิดใช้งานโหมดวาง
James Snyder

24
@JamesSnyder วิธีที่ดีกว่าคือการ:set paste!วางแปะอยู่ใกล้กับประวัติคำสั่งของคุณมากดังนั้นคุณสามารถกด ':' จากนั้นลูกศรขึ้นและเพิ่ม '!'
Rafael Barbosa

6
เพียงแค่อยากรู้อยากเห็น - สิ่งที่ดีกว่าหรือแตกต่างกันเกี่ยวกับ:set paste! Thanks :)
Michael Durrant

33
!ในตอนท้ายของคำสั่งในvimสลับคำสั่งเปิดและปิด วิธีนี้คุณไม่จำเป็นต้องพิมพ์:set nopasteแทนคุณสามารถเลื่อนดูประวัติและเรียกใช้คำสั่งเดียวกัน ( :set paste!) อีกครั้ง
에이바

3
@blockloop คุณควรเปิดใช้งานขณะวางและปิดการใช้งานในภายหลัง
NieDzejkob

125

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

คีย์ผสม: Ctrl-O p

แก้ไข:น่าสนใจ ดูเหมือนว่ามีหลายวิธีที่คนอื่นหลายคนระบุไว้


2
ctrl-r "ใช้งานไม่ได้สำหรับฉัน (os x, vi ในเทอร์มินัล) ctrl-o p ทำได้
Bob

4
นี่เป็นวิธีที่เร็วและง่ายที่สุดในการจดจำ
pinpox

เกี่ยวกับesc + pอะไร
sitilge

2
พิมพ์เร็วกว่าesc + p + iและแน่นอนง่ายกว่าCTRL-R + "
lucidbrot

CTRL-R "จริงนี้บางครั้งมีลักษณะการทำงานที่แตกต่างจาก ตัวอย่างเช่นแม้ว่าการตั้งค่า vimrc สามารถเปลี่ยนแปลงสิ่งนี้ได้ แต่การวางบางสิ่งในบรรทัดใหม่โดยใช้CTRL-O pทำให้การเยื้องของมันหายไป
noname

30

ในขณะที่อยู่ในโหมดแทรกคุณสามารถใช้Ctrl-R {register}โดยที่registerสามารถ:

  • + สำหรับคลิปบอร์ด
  • * สำหรับคลิปบอร์ด X (ข้อความที่เลือกล่าสุดใน X)
  • " สำหรับการลงทะเบียนที่ไม่มีชื่อ (ลบล่าสุดหรือดึงเป็นกลุ่ม),
  • หรืออีกหลายคน (ดู:h registers)

Ctrl-R {register} แทรกข้อความราวกับว่ามันถูกพิมพ์

Ctrl-R Ctrl-O {register} แทรกข้อความที่มีการเยื้องเดิม

Ctrl-R Ctrl-P {register} แทรกข้อความและเยื้องอัตโนมัติ

Ctrl-O สามารถใช้เพื่อเรียกใช้คำสั่งโหมดปกติใด ๆ ก่อนที่จะกลับไปที่โหมดแทรกดังนั้น
Ctrl-O "+pสามารถใช้งานได้เช่นกัน

สำหรับข้อมูลเพิ่มเติมดูเอกสารประกอบด้วย :h i_ctrl-r


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

26

คุณสามารถใช้สิ่งนี้เพื่อวางจากคลิปบอร์ดด้วยCtrlv:

set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>

และนี่สำหรับการเลือกภาพของ yanking ในคลิปบอร์ดด้วยCtrlc:

vnoremap <C-c> "+y

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

set clipboard=unnamedplus

ด้วยการกำหนดค่านี้คุณสามารถดึงมันออกมาก่อนในโหมดปกติแล้ววางด้วย Ctrlvในโหมดแทรก นอกจากนี้คุณยังสามารถวางข้อความจากอินสแตนซ์กลุ่มและแอพพลิเคชั่นต่าง ๆ

ตัวเลือกอื่นคือ:

set clipboard=unnamed

จากนั้นคุณจะสามารถเลือกบางสิ่งได้โดยการลากเมาส์ในสภาพแวดล้อม X และวางลงในกลุ่มหลังจากนั้น แต่ (ด้วยเหตุผลบางอย่าง) คุณจะไม่สามารถดึงบางสิ่งบางอย่าง ( y) เป็นกลุ่มและshiftinsertอื่นหลังจากนั้นซึ่งอาจจะค่อนข้าง จำกัด

เป็นกลุ่มเอกสารเกี่ยวกับเรื่องนี้: http://vim.wikia.com/wiki/Accessing_the_system_clipboard

สำหรับการวางจากการลงทะเบียนที่กำหนดเองคุณสามารถทำตามคำตอบอื่น ๆ :) คำตอบนี้ส่วนใหญ่เกี่ยวกับการรวม Vim เข้ากับคลิปบอร์ดระบบของคุณ


หมายเหตุว่าset clipboard=unnamedplusและset clipboard=unnamedในการทำงานของคุณจะต้องใช้ gvim หรือ vimx ( vim-X11): +xterm_clipboardเหล่านี้จะรวบรวมกับ คุณสามารถเลือกที่จะนำสิ่งนี้เข้าสู่.bashrcนามแฝงvimด้วยvimx:

if [ -e /usr/bin/vimx ]; then
    alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi

คุณสามารถตรวจสอบว่าเสียงเรียกเข้าของคุณมี+xterm_clipboardข้อมูลที่ให้ไว้โดยvim --versionหรือไม่


7
นี่คือสิ่งที่ฉันกำลังมองหา มันเป็นคำตอบที่สมเหตุสมผลเท่านั้นที่นี่ นี่คือสิ่งที่คนคาดหวังในการทำงาน ไม่มีใครรู้ว่าทำไมพฤติกรรมเริ่มต้นของ:set pasteและไบเซนไทน์<leader><leader> * yถึงเป็นที่ต้องการจากระยะไกล? เพื่อไม่ให้เกิดความมุ่งมั่นเกินไปฉันก็อยากรู้อยากเห็นสิ่งที่ปรัชญานี้สะท้อนให้เห็นถึงความจริงหรือถ้ามันเป็นเพียงความโชคร้ายทางประวัติศาสตร์
Aeschylus

คำตอบของคุณทำให้ฉันสามารถใช้ Shift + Insert ใน Gvim ได้ด้วยinoremap <S-Insert> <F12><C-r>+<F12>(ฉันใช้ F12 เป็นสีพาสเทล) ขอบคุณ
sromero

20

หากคุณตั้งเป็นกลุ่มที่จะใช้คลิปบอร์ดระบบ ( :set clipboard=unnamed) จากนั้นข้อความใด ๆ ที่คุณคัดลอกในกลุ่มสามารถวางใช้+Shift + เป็นเพียงการผสมคีย์วางทั้งระบบปฏิบัติการ ( + คือ 'คัดลอก' ที่สอดคล้องกัน)InsertShiftInsertCtrlInsert


1
ไม่ทราบเกี่ยวกับ S-Insert :)
BandGap

มันทำงานในสิ่งที่ตรงกันข้าม? จะpวางข้อความในคลิปบอร์ดหรือไม่
Zaz

ก่อนที่จะใช้Shift + Insertเพื่อวางข้อความเราต้องอยู่ในโหมดแทรก
jdhao

18

คุณสามารถใช้ปุ่มกลางของเมาส์เพื่อวางในโหมดแทรก (Linux เท่านั้น)


106
หนูตัวนี้พูดถึงอะไร?
Jim Mitchener

19
OS ที่ไม่ใช่ลินุกซ์เหล่านี้ที่คุณพูดถึงคืออะไร?
Bruno Bronosky

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

การวางปุ่มกลางของปุ่มเมาส์นั้นค่อนข้างพบได้ทั่วไปในแอปพลิเคชั่น Linux ทั้งหมดโดยไม่ จำกัด ด้วยเทอร์มินัลหรือเวอร์ชั่น OS
lcltj

ไม่ทำงานใน Arch Linux + urxvt มันเพิ่มบรรทัดใหม่เท่านั้น
zygimantus

5

คุณสามารถเข้าสู่-- INSERT (past) --โหมดผ่าน:

  • แป้นพิมพ์คำสั่งผสม: y p

หรือ

  • :set pasteและเข้าสู่โหมดแทรก ( :set nopasteเพื่อปิดการใช้งาน)

เมื่ออยู่ใน-- INSERT (past) --โหมดเพียงใช้ฟังก์ชันวางระบบของคุณ (เช่นCtrlShiftvบน Linux,Cmdvบน Mac OS)

กลยุทธ์นี้มีประโยชน์มากเมื่อใช้เป็นกลุ่มมากกว่า ssh


4

ใช่. ใน Windows Ctrl+Vและ Linux กดปุ่มทั้งสองปุ่มเกือบพร้อมกัน

ใน Windows ฉันคิดว่าบรรทัดนี้ใน _vimrc ของฉันน่าจะเป็น:

source $VIMRUNTIME/mswin.vim

ใน Linux ฉันจำไม่ได้ว่าทำไปแล้ว ดูเหมือนว่าฉันอาจลบบางบรรทัดจากไฟล์. vimrc เริ่มต้น


ฉันสามารถโหวตมากกว่าหนึ่งครั้งได้หรือไม่? ฉันต้องการวางเมื่อฉันมาจากหน้าต่างอื่น - ดังนั้นฉันจึงมักจะเมา ยอดเยี่ยม!
dave

ใน Linux คุณวางด้วยการกดปุ่มกลางของเมาส์ หากคุณมีเม้าส์สองปุ่มและกดปุ่มซ้ายและขวาก็ต้องใช้ "Emulate3Buttons" หรือคล้ายกันเพื่อใช้งานในลักษณะนี้
Cougar

0

วางในโหมดแทรก

ดูเหมือนว่าแผนที่ที่กำหนดเองจะเหมาะสมในกรณีนี้ นี่คือสิ่งที่ฉันใช้เพื่อวางรายการ yanked ในโหมดแทรก:

inoremap <Leader>p <ESC>pa

Leaderกุญแจของฉันที่นี่คือ\; ซึ่งหมายความว่าการกดปุ่ม\pในโหมดแทรกจะเป็นการวางรายการ / บรรทัดที่ถูกดึงไว้ก่อนหน้านี้


0

เพียงเพิ่มแผนที่:

" ~/.vimrc
inoremap <c-p> <c-r>*

รีสตาร์ทเสียงเรียกเข้าและเมื่อกดCrtl+pในโหมดแทรกข้อความที่คัดลอกจะถูกวาง

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