มีวิธีการคัดลอกบล็อกข้อความไปยังคลิปบอร์ดของระบบเพื่อให้ฉันสามารถวางในโปรแกรมอื่นได้หรือไม่
cpip
cpi{
มีวิธีการคัดลอกบล็อกข้อความไปยังคลิปบอร์ดของระบบเพื่อให้ฉันสามารถวางในโปรแกรมอื่นได้หรือไม่
cpip
cpi{
คำตอบ:
สำหรับระบบที่ใช้X11 (เช่นLinuxและระบบอื่น ๆ ที่คล้ายกับUNIX ) มีสองบอร์ดคลิปซึ่งแยกจากกัน:
^C
และวางด้วย^V
(เหมือน MS Windows)ระบบ OS XและWindowsมีคลิปบอร์ดเดียวเท่านั้น
สำหรับระบบ X11 ยังมีจำนวนเครื่องมือที่ซิงโครไนซ์คลิปบอร์ดเหล่านี้ให้คุณ ดังนั้นหากพวกเขาดูเหมือนจะเหมือนกันคุณอาจมีหนึ่งในนั้นทำงาน
Vim มีการลงทะเบียนพิเศษสองรายการที่สอดคล้องกับคลิปบอร์ดเหล่านี้:
*
ใช้หลัก ช่วยในการจำ: S tar เป็นSเลือกตั้ง (สำหรับการคัดลอกจอsเลือกตั้ง)+
ใช้ CLIPBOARD; ช่วยในการจำ: CTRL PLUS C (สำหรับปุ่มลัดทั่วไป)บน Windows & OS X ไม่มีความแตกต่างระหว่าง+
และ*
เนื่องจากระบบเหล่านี้มีคลิปบอร์ดเดียวเท่านั้นและทั้งสองรีจิสเตอร์อ้างถึงสิ่งเดียวกัน (มันไม่สำคัญว่าคุณจะใช้งานอะไร)
คุณสามารถใช้การลงทะเบียนเหล่านี้เป็นการลงทะเบียนใด ๆ ตัวอย่างเช่นการใช้คลิปบอร์ดหลัก*
ด้วยคำสั่งy
และp
:
"*yy
"*p
คุณอาจจะใช้สิ่งนี้เป็นปุ่มลัดที่สะดวกกว่า:
noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p
หากคุณต้องการอินเทอร์เฟซ "อัตโนมัติ" กับคลิปบอร์ดของระบบแทนการอ้างอิงด้วยตนเองตลอดเวลาคุณสามารถตั้งค่าclipboard
ตัวแปร:
unnamed
ใช้*
(เลือกบน)unnamedplus
ให้ใช้+
(CLIPBOARD, ^C
)ตอนนี้เพียงแค่ใช้yy
จะไปที่คลิปบอร์ดของระบบแทนการลงทะเบียนที่ไม่มีชื่อของ Vim และp
จะวางคลิปบอร์ดของระบบ
นอกจากนี้คุณยังสามารถกำหนดให้กับผู้ลงทะเบียนเหล่านี้ได้เช่นเดียวกับการลงทะเบียนด้วยlet
:
:let @+=42
:let @*=42
การclipboard
ตั้งค่ามีตัวเลือกเพิ่มเติม (เช่นไม่รวมตัวกรอง) แต่สิ่งเหล่านี้เป็นพื้นฐาน ดู:help 'clipboard'
เรื่องเต็ม ;-)
ถ้าคุณใช้ gVim
:set guioptions+=a
คุณจะได้รับการคัดลอกเมื่อเลือกพฤติกรรมเมื่อใช้
นี่คือการเปิดใช้งานโดยค่าเริ่มต้นในระบบ X11 (คัดลอกไปที่หลัก) แต่ไม่ได้อยู่ใน MS Windows & OSX (เนื่องจากการเลือกข้อความใด ๆ จะแทนที่คลิปบอร์ดของคุณ)
+clipboard
?Vim ต้องการ+clipboard
แฟล็กคุณลักษณะเพื่อให้สิ่งนี้ทำงานได้; คุณสามารถตรวจสอบว่าเป็นกลุ่มของคุณมีนี้โดยใช้:echo has('clipboard')
จากภายในกลุ่ม (ถ้าออกเป็น0
ก็ไม่ได้ปัจจุบันถ้ามัน1
ก็เป็น) หรือการตรวจสอบการส่งออกของ
สำหรับvim --version
+clipboard
ลีนุกซ์ส่วนใหญ่จัดส่งมาพร้อมกับ Vim แบบ "น้อยที่สุด" โดยค่าเริ่มต้น, ซึ่งไม่มี+clipboard
, แต่โดยทั่วไปคุณสามารถติดตั้งได้:
vim-gtk
vim-gnome
vim-X11
และเรียกใช้vimx
แทนvim
( ข้อมูลเพิ่มเติม )gvim
(สิ่งนี้จะเปิดใช้+clipboard
งานตามปกติvim
เช่นกัน)นอกจากนี้คุณยังสามารถใช้xclip
, xcopy
หรือxsel
เพื่อคัดลอกข้อความไปยังคลิปบอร์ด; ดูคำถามต่อไปนี้สำหรับการแก้ปัญหา:
คุณยังสามารถใช้คลิปบอร์ดบนเครื่องระยะไกลหากคุณเปิดใช้งานการส่งต่อ X11 ผ่าน SSH สิ่งนี้มีประโยชน์อย่างยิ่งกับเคล็ดลับข้างต้นเนื่องจากคุณสามารถใช้
xclip
เพื่อเข้าถึงคลิปบอร์ดของเดสก์ท็อป เสียงเรียกเข้าบนเครื่องที่คุณกำลังจะยังต้องการ+clipboard
คุณสมบัติอยู่
สิ่งนี้ต้องการการForwardX11Trusted
ตั้งค่าและควรทำกับเซิร์ฟเวอร์ที่เชื่อถือได้เท่านั้นเนื่องจากจะช่วยให้เซิร์ฟเวอร์สามารถควบคุมเซสชัน X11 ของคุณได้เกือบสมบูรณ์:
$ ssh -XY myhost
หากต้องการตั้งค่าเหล่านี้แบบถาวร (ดังนั้นคุณไม่จำเป็นต้องเพิ่ม-XY
ทุกครั้ง) คุณสามารถทำสิ่งนี้ใน~/.ssh/config
:
# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
ForwardX11 yes
ForwardX11Trusted yes
Neovim ปรับปรุงการสนับสนุนคลิปบอร์ด อินเตอร์เฟซในตัวจะถูกลบออกไปและแทนที่ด้วยระบบที่เรียกสาธารณูปโภคภายนอกเช่นxclip
, xsel
หรือ
/pbcopy
pbpaste
มันควรรับสาธารณูปโภคเหล่านี้โดยอัตโนมัติและใช้พวกเขา บน OS X pbcopy
และpbpaste
ควรจะมีให้ใช้งานตามค่าเริ่มต้นบน Linux คุณอาจต้องการติดตั้งxclip
เนื่องจากเป็นที่แพร่หลายมากที่สุด (จริงๆแล้วมีสอง
รุ่นxsel
ด้วยแฟล็กที่เข้ากันไม่ได้นี่เป็นเรื่องที่โง่จริงๆ)
ดูที่:help clipboard
Neovim ด้วย
"<Space>
"
ดังนั้นในกรณีเหล่านั้นคุณจะต้องกด"<Space>+y
หรือ"<Space>*y
คัดลอก
"
สามารถเลือกชื่อที่ลงทะเบียนมากมาย ไม่ได้วิเศษมันเป็นเพียงแค่ลงทะเบียน"+
+
ดังนั้นสำหรับตัวอย่างเช่นถ้าคุณต้องการเพื่อคัดลอกสามสิ่งในเวลาเดียวกันและวางแต่ละของพวกเขาหนึ่งโดยหนึ่งคุณสามารถ"1y
, "2y
และ"3y
และต่อมา"1p
, และ"2p
"3p
นี่เป็นสิ่งที่ทรงพลังจริงๆและไม่มีอยู่ในตัวแก้ไขอื่น ๆ เกือบทั้งหมด การใช้งานที่น่าสนใจอีกอย่างคือดูที่แมโครที่เก็บไว้ ตัวอย่างเช่นถ้าคุณบันทึกด้วยqq
แต่คุณรู้ว่าคุณต้องการที่จะแก้ไขได้คุณสามารถ: ในสายชั่วคราวแก้ไขได้และ"qp
"qd
คำตอบอื่น ๆ ครอบคลุมถึงวิธีการคัดลอกข้อความจากบัฟเฟอร์ของคุณไปยังคลิปบอร์ดของระบบ การดำเนินการทั่วไปอื่นคือการคัดลอกข้อความจากการลงทะเบียนอื่นไปยังคลิปบอร์ด ตัวอย่างเช่นหากคุณดึงข้อความไปแล้ว"
(การลงทะเบียนเริ่มต้น) คุณอาจต้องการโหลดการลงทะเบียนนั้นลงในคลิปบอร์ด
คุณสามารถทำได้ด้วย:let
:
let @+=@"
- คัดลอกค่าเริ่มต้นลงในคลิปบอร์ดlet @*=@"
- คัดลอกค่าเริ่มต้นลงในการเลือกหลัก X11 ("คลิปบอร์ดเมาส์")let @+=@a
- คัดลอกจากลงทะเบียนa
ไปยังคลิปบอร์ดโปรดทราบว่างานนี้สำหรับการลงทะเบียนโดยทั่วไป: let @a=@b
สำเนาลงทะเบียนเพื่อลงทะเบียนb
a
จากhttp://vim.wikia.com/wiki/Accessing_the_system_clipboard
set clipboard=unnamedplus
สิ่งนี้จะเปลี่ยนค่าเริ่มต้น Vim register เป็น+
register ซึ่งเชื่อมโยงกับคลิปบอร์ดของระบบ จาก:h clipboard-unnamedplus
:
clipboard-unnamedplus
unnamedplus A variant of the "unnamed" flag which uses the
clipboard register '+' (quoteplus) instead of
register '*' for all yank, delete, change and put
operations which would normally go to the unnamed
register. When "unnamed" is also included to the
option, yank operations (but not delete, change or
put) will additionally copy the text into register
'*'.
Only available with the +X11 feature.
Availability can be checked with:
if has('unnamedplus')
:version
ภายใน Vim เพื่อดูว่ามี + X11 ปรากฏในรายการคุณลักษณะที่รวมอยู่หรือไม่ นอกจากนี้คุณยังสามารถตรวจสอบว่าคุณสมบัติ 'unnamedplus' สามารถใช้ได้กับ :if has('unnamedplus')⏎ echo 'yes'⏎ endif
หากคุณไม่ได้อยู่บน Linux คุณควรใช้ชื่อที่ไม่ได้ใช้แทน unnamedplus
บนบิลด์ที่สนับสนุนการลงทะเบียนชื่อ*
คือคลิปบอร์ดของระบบ ในการคัดลอกข้อความจาก Vim ไปยังคลิปบอร์ดของระบบคุณสามารถเลือกข้อความโดยใช้โหมดภาพจากนั้นกด"*yเพื่อคัดลอกไปยังคลิปบอร์ดของระบบ
ในทางกลับกันใช้"*pเพื่อวางข้อความจากคลิปบอร์ดของระบบลงในกลุ่ม
ฉันแนะนำให้คุณใช้ Gvim และเพิ่มลงในของคุณ.vimrc
:
source $VIMRUNTIME/mswin.vim
behave mswin
ซึ่งจะช่วยให้การสนับสนุนสำหรับCtrlC, CtrlX, CtrlVเช่น Notepad ใน Windows
โปรดทราบว่านี้ยังจะเพิ่มบางทางลัดอื่น ๆ ของ Windows ทั่วไปเช่นCtrlSสำหรับ:w
, CtrlAสำหรับการเลือกทั้งหมด ฯลฯ
หากเสียงเรียกเข้าของคุณไม่รองรับ+clipboard
คุณสามารถใช้ปลั๊กอินfakeclipสำหรับ Linux, Mac, Windows, tmux, หน้าจอ, ...
คำตอบอื่น ๆ ได้ครอบคลุมสิ่งสำคัญทั้งหมดเกี่ยวกับการลงทะเบียน ฉันต้องการเพิ่มอีกหนึ่งสิ่งที่ฉันใช้
มีวิธีใน Vim ที่จะคัดลอกข้อความที่เลือกโดยตรงไปยังคลิปบอร์ด ใส่สิ่งนี้ลงในไฟล์vimrcของคุณ:
set guioptions+=a
และด้วยสิ่งนี้เมื่อใดก็ตามที่คุณเลือกข้อความที่จะถูกคัดลอกไปยังคลิปบอร์ดของคุณ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้:help guioptions
BTW นี่สำหรับ gVim เท่านั้น
guioptions+=a
ยังกล่าวถึงในคำตอบของ Carpetsmoker
คุณยังสามารถใช้คำสั่งโกลบอลเพื่อวางรูปแบบเฉพาะบางอย่างบนคลิปบอร์ด มันจะมีประโยชน์ในสถานการณ์ที่คุณมีข้อมูลกระจัดกระจายในไฟล์และการเผชิญปัญหาด้วยตนเองมีแนวโน้มที่จะเกิดข้อผิดพลาดและเหนื่อยล้า
ขั้นแรกทำความสะอาดการลงทะเบียนที่จะได้รับข้อมูล
:let @a=""
จากนั้นคัดลอกทุกบรรทัดที่มีรูปแบบลงไป
:g/pattern/yank A
ในที่สุดการถ่ายโอนข้อมูล (คัดลอก) ข้อมูลไปยังคลิปบอร์ดของระบบ
:let @+=@a
หากคุณพยายามที่จะคัดลอกทุกบรรทัดที่มี "รูปแบบ" โดยตรงไปยังคลิปบอร์ดมันจะไม่ทำงานเพราะคลิปบอร์ดไม่มีความสามารถในการผนวกเนื้อหาใหม่ดังนั้นเราจึงใช้ที่นี่เป็นกลุ่มปกติลงทะเบียนเพื่อจัดเก็บทุกบรรทัดที่มี รูปแบบในครั้งเดียวแล้ววางไว้บนคลิปบอร์ด
OBS: มันจำเป็นต้องมีการ จำกัด การลงทะเบียนก่อนที่จะใช้มันและการใช้เวอร์ชั่น UPPERCASE ของการลงทะเบียนช่วยให้เราสามารถผนวกเนื้อหาไม่เช่นนั้นจะไม่สามารถใช้งานได้
หากคุณไม่สามารถหาวิธี+clipboard
ทำงานได้ซึ่งฉันไม่สามารถทำได้ด้วยเหตุผลบางอย่างคุณสามารถทำได้
สมมติว่าคุณต้องการคัดลอกเฉพาะส่วนของไฟล์ฉันจะทำshift
+ v
เพื่อเข้าสู่โหมดแสดงภาพและเน้นเฉพาะบรรทัดที่ฉันต้องการคัดลอก จากนั้นฉันก็ทำสิ่งนี้
# Linux Wayland
:'<,'>w !wl-copy
# Linux Xorg
:'<,'>w !xclip -selection clipboard
คำอธิบาย
'<,'>
- หมายถึงคุณใช้โหมดภาพเพื่อเลือกช่วง (คุณไม่ได้พิมพ์)w !{cmd}
- เขียนช่วงไปยัง stdin ของcmd
ดูเพิ่มเติมที่:help w_c
wl-copy
และxclip
เป็นโปรแกรมที่คุณสามารถไพพ์ข้อความและจะเพิ่มลงในคลิปบอร์ดระบบของคุณนอกจากนี้เมื่อสิ่งนี้อยู่ในประวัติของคุณคุณไม่จำเป็นต้องพิมพ์สิ่งทั้งหมดอีกครั้ง เพียงเลือกโหมดภาพให้พิมพ์w
จากนั้นกดขึ้นและคำสั่งควรเติมข้อความอัตโนมัติ นอกจากนี้คุณไม่ต้องใช้โหมดภาพ คุณสามารถตั้งค่าช่วงใดก็ได้ที่คุณต้องการ