การคัดลอกข้อความนอก Vim ด้วย set mouse = a ที่เปิดใช้งาน


232

หลังจากเปิดใช้งานset mouse=aข้อความที่คัดลอกภายใน Vim จะไม่วางอยู่ด้านนอกของ Vim ไม่มีใครรู้วิธีแก้ไขปัญหานี้หรือไม่?

ที่นี่การเลือกข้อความด้วยเมาส์จะเปิดโหมดภาพและปิดการใช้งานCopyตัวเลือกในเมนูป๊อปอัพ:

ป้อนคำอธิบายรูปภาพที่นี่


2
หากเสียงเรียกเข้าของคุณถูกคอมไพล์ด้วย+clipboardและmouse=aคุณจะสามารถคัดลอก / วางจาก / ไปยังเสียงเรียกเข้าโดยไม่ต้องใช้เมนูป๊อปอัพเทอร์มินัล คุณสามารถตรวจสอบว่าclipboardเปิดใช้งานvim --versionได้หรือไม่
Jérôme Pouiller

@Jezz มูลค่าชี้แจงว่า A) mouse=aไม่ใช่ตัวเลือกการคอมไพล์มันเป็นอะไรใน vimrc B) เมื่อ vim ถูกคอมไพล์ด้วย+clipboardมันช่วยให้คุณสามารถคัดลอก / วางเมื่อ:set numberเปิดและไม่มีการคัดลอก / วางตัวเลขแม้ว่าบางทีคุณยังต้องทำอะไรบางอย่าง การแม็พ C) ไม่ต้องคอมไพล์ VIM อีกครั้งมันอาจจะอยู่ใน vim บนตัวจัดการแพ็กเกจบางตัวที่รองรับโดย OS ใด ๆ .. บน osx, vim ของ Brew มีมันแม้ว่า vim ที่เป็นค่าเริ่มต้นของ osx ไม่ คำตอบของฉันพูดถึงเรื่องนี้ osx
barlop

บางทีการติดตั้งก็xselเหมาะกับคุณเช่นกันคุณสามารถเลือกข้อความด้วยโปรแกรมแก้ไขหรือใช้เมาส์แล้วกดctrl+cเพื่อคัดลอกข้อความตามวิธีที่ใช้กับ neovim, github.com/neovim/neovim/issues/7945#issuecomment-361970165
Naeem Baghi

คำตอบ:


426

กดshiftในขณะที่เลือกด้วยเมาส์ สิ่งนี้จะทำให้การเลือกเมาส์ทำงานราวกับmouse=aว่าไม่ได้เปิดใช้งาน

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

OS X (mac): กดปุ่ม alt / ตัวเลือกค้างไว้ขณะเลือก ( ต้นฉบับ )


2
ตกลงนี่เป็นทางออกแน่นอน แต่ถ้าคุณต้องการเลือกรหัสที่มากกว่าบนหน้าจอ (จากนั้นคุณต้องเลื่อนและเลือกในเวลาเดียวกัน)
Ozkan

3
นอกจากนี้ยังมีตัวเลือกในการใช้การเลือกบล็อกโดยการกด <kbd> ctrl </kbd> + <kbd> shift </kbd> + ปุ่มเมาส์ซ้ายเพื่อเริ่มการเลือกบล็อก ปุ่มกลางของเมาส์วางเนื้อหาที่คัดลอกไปยังหน้าต่างอื่น
micrub

6
หากคุณมีหมายเลขบรรทัด (ตามภาพหน้าจอแสดง) จากนั้นเมื่อเลือกใช้ ALT บน Mac OS X ดังนั้นหมายเลขบรรทัดจะถูกคัดลอกเช่นกัน ในกรณีนี้ควรใช้ ALT + CMD เมื่อเลือกโหมด Block Selection เพื่อหลีกเลี่ยงการเลือกตัวเลข
แอรอน

16
สำหรับ Mac เทอร์มิหลังจากOS X 10.11 El Capitan , Fnที่สำคัญคือวิธีการที่เหมาะสมที่จะไป คือ (พร้อมmouse=aเปิดใช้งาน) การเลือกข้อความในขณะที่กดFnปุ่มจากนั้นใช้ CMD + C เพื่อคัดลอกและวางในทุกที่ที่คุณต้องการ
YaOzI

1
ฉันไม่รู้ว่าคำตอบนั้นมี upvotes มากมาย หากคุณเปิดใช้งานการสนับสนุนเมาส์เพื่อหลีกเลี่ยงการคัดลอกหมายเลขบรรทัดคำแนะนำนี้จะไร้ประโยชน์โดยสิ้นเชิง
Stelios Adamantidis

49

การใช้งาน", +, yหลังจากการเลือกภาพ คุณไม่ควรใช้คำสั่ง copy ของเทอร์มินัลเนื่องจากนั่นเป็นการคัดลอกสิ่งที่เทอร์มินัลเห็นแทนเนื้อหาจริง นี่คือสิ่งที่ทำ:

  • ", +บอกเป็นกลุ่มที่จะใช้ลงทะเบียนชื่อ+สำหรับถัดไปลบงัดหรือใส่ การลงทะเบียนชื่อ+คือการลงทะเบียนพิเศษมันคือการลงทะเบียนคลิปบอร์ด X11 (ในระบบอื่นคุณควรใช้*แทนฉันคิดว่าเห็น:help clipboardและ:help x11-selection)
  • y คือคำสั่ง yank ซึ่งบอกให้ Vim ทำการเลือกในการลงทะเบียนชื่อก่อนหน้านี้

คุณสามารถแมปแบบนี้:

:vmap <C-C> "+y

จากนั้นไฮไลต์บางสิ่งบางอย่างด้วยเมาส์แล้วกดControl-Cเพื่อคัดลอก

ฟีเจอร์นี้จะใช้งานได้เมื่อรวบรวมเป็นกลุ่มพร้อมกับ+xterm_clipboardตัวเลือก วิ่งvim --versionเพื่อดูว่ามันมี


4
หรืออาจ"*yขึ้นอยู่กับระบบปฏิบัติการ
frabjous

นั่นได้ผล! อย่างไรก็ตามการรวมกันนั้นค่อนข้างซับซ้อนทั้ง 4 ปุ่มจริง ๆ แล้วฉันอาจต้องการแมปอีกอันในขณะที่ใช้วิธี "shift" จากคำตอบอื่น
lyuba

การทำแผนที่การทำงานอย่างสมบูรณ์ดียัง :) ตอนนี้ผมไม่ทราบว่าคำตอบจากพวกคุณผมควรจะทำเครื่องหมายว่าได้รับการยอมรับ :)
Lyuba

2
สำหรับฉันนี่เป็นทางออกที่ดีกว่าคำตอบที่ยอมรับเพราะด้วยวิธีนี้หมายเลขบรรทัดจะไม่ถูกคัดลอก
Saulo Silva

เกี่ยวกับ+clipboardอะไร และเกี่ยว+clipboardกับการxterm_clipboardปิด?
barlop

18

แทนที่จะset mouse=aใช้set mouse=rใน. vimrc


1
แต่มันปิดการเลื่อน
Makesh

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

@Mikel ถูกต้องดูคำตอบของฉันเช่นกันคำตอบของ Josh Lee อาจช่วยได้
barlop

น่าเสียดายนี่จะเป็นการคัดลอกหมายเลขบรรทัดหากเปิดใช้งาน
vikin9

17

ใน OSX ใช้แทนfnshift


ทำงานกับฉันด้วยoptionคีย์ซึ่งaltเทียบเท่ากับคีย์บนโฮสต์ MacOS มันเป็นสถานีระยะไกลบน debian9 แม้ว่า ไม่ทำงานโดยการเพิ่มอย่างใดอย่างหนึ่ง set mouse=a/ set mouse=rใน/etc/vim/vimrcระยะไกล
mrtipale


4

อีกตัวเลือกหนึ่งของ OSX-Mac คือการยกเลิกการเลือกView->Allow Mouse Reporting(หรือกด⌘-R เพื่อสลับ) สิ่งนี้ช่วยให้คุณสามารถสลับระหว่างการโต้ตอบกับเมาส์และการเลือกเมาส์ซึ่งอาจเป็นประโยชน์เมื่อเลือกและคัดลอก / วางบิตไม่กี่เพราะคุณไม่มี เพื่อกดปุ่มโมดิฟายเออร์เพื่อทำ

หมายเหตุสำหรับ Multiline ด้วยหมายเลขบรรทัด:

ฉันมักจะเปิดใช้งานหมายเลขบรรทัดดังนั้นสิ่งนี้จะคัดลอกหมายเลขบรรทัดหากคุณเลือกหลายบรรทัด หากคุณต้องการคัดลอกหลายบรรทัดโดยไม่มีหมายเลขบรรทัดให้ปิดใช้งานหมายเลข:set nonuแล้วคุณสามารถ:set nuเปิดใช้งานได้อีกครั้งหลังจากคัดลอกเสร็จแล้ว


1

คุณสามารถใช้:set mouse&ในบรรทัดคำสั่ง vim เพื่อเปิดใช้งานการคัดลอก / วางข้อความที่เลือกโดยใช้เมาส์ จากนั้นคุณสามารถใช้ปุ่มกลางของเมาส์หรือshiftinsertวาง


จากนั้นเมื่อคุณมี:set numberตัวเลขไฮไลต์ ไม่ค่อยดีเท่าไหร่ ดังนั้นคุณจึงเลิกทำสิ่งที่ดีได้โดยset mouse=a
barlop

1

การตั้งค่าการรวบรวมที่เป็นกลุ่มนั้นเป็นส่วนหนึ่งของปัญหา vim --versionแสดงสิ่งเหล่านี้

ใน OSX, กลุ่มเริ่มต้นมี-clipboard แต่คุณต้องการ+clipboard

บน osx คุณสามารถและเห็นได้ชัดว่าควรใช้ macvim คุณสามารถทำได้ที่หนึ่งได้brew cask install macvim +clipboard

พวกเขาคุณจะมีสอง vims

~$ ls -l /usr/bin/vim   <--- default vim
-rwxr-xr-x  1 root  wheel  1745984 15 Jul  2017 /usr/bin/vim

~$ ls -l /usr/local/bin/vim   <-- macvim, installed recently via that mentioned brew line. 
lrwxr-xr-x  1 apple  admin  42 16 May 23:32 /usr/local/bin/vim -> /Applications/MacVim.app/Contents/bin/mvim
~$ 

การเรียกใช้ vim จะเรียกใช้ macvim 'cos /usr/local/binควรอยู่ก่อน/usr/binในเส้นทางแม้ว่าคุณจะสามารถตรวจสอบwhich vimได้

การเรียกใช้ vim (เพื่อเรียกใช้ macvim) นั้นใช้ได้ แต่คุณอาจต้องการแมป vi กับ macvim 'cos มิฉะนั้นการเรียกใช้ vi จะอยู่ที่ vim เริ่มต้น! คุณสามารถเขียนใหม่หรือลบ (ด้วย rm) และสร้างลิงก์ vi sym ใหม่ด้วย ln และในการทำเช่นนั้นหากไม่มีข้อผิดพลาด 'การดำเนินการที่ไม่ได้รับอนุญาต "คุณต้องปิดการใช้งาน (ชั่วคราว) SIL /apple/208478/how-do-i-disable-system-integrity-protection- จิบ-aKA-ราก-on-MacOS-os-x

macvim มี+clipboardดังที่แสดงโดยvim --version

นี่คือการทำงาน~/.vim/vimrcกับสายที่จำเป็นเท่านั้น

:set mouse=a
:map <leader>c "+y
:map <leader>v "+p

คีย์ผู้นำเริ่มต้นคือแบ็กสแลช

ฉันอ่านข้อเสนอแนะที่ควรใช้รหัสผู้นำ .. (แน่นอนการควบคุมมีหลายคีย์ที่ใช้งานอยู่แล้วดังนั้นข้อเสนอแนะคือไม่ใช้การควบคุมฉันไม่ทราบว่าใช้กับคำสั่งคีย์ด้วยหรือไม่ แต่อย่างใด)

ด้วยการทำแผนที่ดังกล่าว \cจะทำ"+yซึ่งจะคัดลอกจากการลงทะเบียนที่รู้จักกันในชื่อ + ไปยังคลิปบอร์ด และ\vจะวางจากการลงทะเบียนที่เรียกว่า +

นั่นคือสำเนา / วางที่ทำงานระหว่าง windows

ระบบปฏิบัติการอื่นอาจต้องการ"*มากกว่า"+


-xterm_clipboardทั้งสองมี VIMS อาจ+xterm_clipboardจะเป็นประโยชน์ในทางใดทางหนึ่ง แต่มันไม่สำคัญกับการแก้ปัญหานี้
barlop

0

หากคุณใช้เซสชัน Putty แล้วมันจะคัดลอกส่วนที่เลือก หากเราใช้ตัวเลือก "set mouse = a" เป็นกลุ่มการเลือกใช้ Shift + Mouse จะเป็นการเลือกข้อความโดยอัตโนมัติ จำเป็นต้องตรวจสอบใน X-term



0

ฉันบังเอิญอธิบายวิธีปิดset mouse=aเครื่องเมื่อฉันอ่านคำถามอีกครั้งและพบว่า OP ไม่ต้องการปิดในตอนแรก อย่างไรก็ตามสำหรับใครก็ตามที่ค้นหาวิธีปิดเม้าส์ ( set mouse=) จากส่วนกลางฉันจะทำการอ้างอิงถึงคำตอบของฉันที่นี่: https://unix.stackexchange.com/a/506723/194822


0

กดปุ่ม Shift ค้างไว้ขณะคัดลอกและวางด้วยตัวเลือกที่เหมาะกับฉัน


นี่คือสิ่งที่คำตอบที่ได้รับการยอมรับพูดว่า เพื่อเป็นการขอบคุณผู้ใช้ - เมื่อคุณมีชื่อเสียงคุณจะสามารถอัปโหลดโพสต์ของพวกเขาได้
Wai Ha Lee

0

เพิ่มที่คุณset clipboard=unnamed .vimrcดังนั้นมันจะใช้การลงทะเบียนของคลิปบอร์ด '*' แทนการลงทะเบียนแบบไม่มีชื่อสำหรับการดึงลบลบและใส่การดำเนินการทั้งหมด (โปรดทราบว่ามันไม่เพียงส่งผลกระทบต่อเมาส์)

พฤติกรรมการลงทะเบียน '*' ขึ้นอยู่กับแพลตฟอร์มของคุณและวิธีvimการรวบรวมของคุณ(หรือถ้าคุณใช้neovim)

หากไม่สามารถใช้งานได้คุณสามารถลองใช้ได้set clipboard=unnamedplusแต่ตัวเลือกนี้เหมาะสมสำหรับระบบ X11 เท่านั้น


-3

ในโหมด ESC เมื่อตั้งค่า mouse = a ให้เลือกข้อความโดยใช้เมาส์ นี้จะเปิดใช้งานโหมดภาพในกลุ่ม จากนั้นคุณสามารถกด 'y' เพื่อดึงข้อความที่เลือกและ 'p' เพื่อวางในตำแหน่งที่คุณต้องการ สิ่งนี้เกิดขึ้นภายในกลุ่ม


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