วิธีคัดลอกข้ามเทอร์มินัล


11

ฉันใช้ระบบ Linux สอง VIMS จะเปิดในสองขั้ว ตอนนี้ฉันต้องการคัดลอกข้อความจาก A ถึง B วิธีหนึ่งที่ทำได้คือเลือกข้อความใน A ใช้เมาส์เพื่อคัดลอกจากนั้นสลับเป็น B ในโหมดแทรกคำสั่ง<c-r>+จะวางข้อความ

อย่างไรก็ตามมีการดำเนินการโดยไม่ใช้เมาส์หรือไม่ เช่น"+yyในเมื่อสวิทช์ไป B o<c-r>+? ฉันสำรวจคู่ของชุดค่าผสมในไร้สาระ และฉันค้นหา "คัดลอกข้ามเทอร์มินัล" แต่ไม่พบอะไรเลย

@statox ผู้ใช้แสดงให้เห็นหนึ่งในการแก้ปัญหาการใช้โหมดภาพคือv$"+yในเมื่อสวิทช์ไป o<c-r>+B

มีวิธีง่าย ๆ ที่สามารถคัดลอกข้อความใน A โดยไม่ต้องเข้าสู่โหมด v หรือไม่? การเข้าสู่โหมด v อย่างเหมาะสมนั้นไม่ได้เกี่ยวข้องกับการกดปุ่มมากเกินไปเพียงแค่สงสัยว่ามีวิธีที่ดีกว่านี้หรือไม่ เช่น. หากเคอร์เซอร์อยู่ตรงกลางของบรรทัดให้yyคัดลอกทั้งบรรทัด (เพื่อลงทะเบียน") ในขณะที่0v$yทำสิ่งเดียวกันด้วยการกดปุ่มพิเศษ

หรือคำถามของฉันสามารถลดลงได้หากมีวิธีที่มีการกดปุ่มน้อยกว่า0v$"+yการคัดลอกที่ฉันสามารถใช้<alt-tab>o<c-r>+เพื่อวาง


ปัญหาที่แน่นอนของคุณคืออะไร? คุณดูเหมือนจะมีทางออก: เลือกข้อความที่คุณด้วยโหมดภาพ (ทำไมจะจะใช้เมาส์?) ใส่ไว้ในการลงทะเบียนคลิปบอร์ดด้วย"+yและในกรณีที่เป็นกลุ่มอื่น ๆ "+pใส่ลงทะเบียนคลิปบอร์ด หรือซ้ำกันของสิ่งนี้ ?
statox

คุณไม่จำเป็นต้องเข้าสู่โหมดภาพเพื่อดึงอะไรบางอย่าง คุณสามารถติดตามyด้วยการเคลื่อนไหว ( :help motion.txt) หรือวัตถุ ( :help object-select) หากคุณดึงและวางข้ามอินสแตนซ์ Vim บ่อยครั้งคุณอาจพบว่าการตั้งค่านั้นclipboardมีunnamedหรือunnamedplusมีประโยชน์ :help 'clipboard'ดู จากนั้นการคัดลอกระหว่างอินสแตนซ์ควรใช้งานได้
garyjohn

1
ประเด็นของความคิดเห็นของฉันไม่ใช่โหมดภาพจริง ๆ แล้วฉันมีปัญหาในการเข้าใจปัญหาของคุณ: ตอนแรกฉันคิดว่ามันเป็นความจริงที่การคัดลอกข้อความจากเทอร์มินัลหนึ่งไปยังอีกเทอร์มินอลตอนนี้ดูเหมือนว่า เป็นไปได้ที่จะดึงเข้าไปในการลงทะเบียนคลิปบอร์ด หากเป็นกรณีที่สองความคิดเห็นของ Garyjohn นั้นมีความเกี่ยวข้อง
statox

1
0v$Vเป็นเช่นเดียวกับ และมันเป็นเรื่องง่ายที่จะทำให้การทำแผนที่สำหรับ:"+y เพื่อที่จะช่วยลดความมัน:nnoremap <Leader>y "+y V\y
Martin Tournoij

@Carpetsmoker ทางออกของคุณเป็นสิ่งที่ดี ฉันต้องการที่จะใช้มันเป็นทางออกที่ดีที่สุดถ้าคุณวางมันลงในภูมิภาคคำตอบ ดูเหมือนว่าหากไม่มีแผนที่หลักสิ่งที่ดีที่สุดที่เราสามารถทำได้เพื่อคัดลอกในคำถามของฉันคือV"+y4 การกดแป้น
user3813057

คำตอบ:


9

คุณสามารถตรวจสอบว่าเป็นกลุ่มที่สร้างขึ้นด้วยการสนับสนุนคลิปบอร์ดด้วย:

:echo has('clipboard')

หากผลลัพธ์คือ1สิ่งต่อไปนี้ควรจะเพียงพอเพื่อให้บรรลุเป้าหมายของคุณ:

"*y    in source Vim
"*p    in destination Vim

คุณสามารถทำให้ทุกอย่างราบรื่นยิ่งขึ้นโดยการซิงโครไนซ์การลงทะเบียนคลิปบอร์ดและการลงทะเบียนเริ่มต้นด้วยการตั้งค่านี้ในvimrc:

set clipboard^=unnamed

หากการส่งออกของ:echo has('clipboard')มี0พิจารณาการติดตั้งเป็นกลุ่มที่เหมาะสมเหมือนvim-gtkหรือvim-gnome(ชื่อของแพคเกจอาจแตกต่างจาก distro เพื่อ distro)


1

ฉันคิดว่าทางออกที่คุณพูดถึงในคำถามของคุณนั้นถูกต้อง หากคุณต้องการลดจำนวนการกดแป้นคุณสามารถสร้างแผนที่ได้เช่น

vmap <leader>y "+y
vmap <leader>d "+d
nmap <leader>p "+p
nmap <leader>P "+P
vmap <leader>p "+p
vmap <leader>P "+P

ดูรายการที่สองที่นี่


1

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

"+y    To yank/copy from a vim-terminal
"+p    To paste in destination vim-terminal

"*y    To yank/copy from a vim-terminal
"*p    To paste in destination vim-terminal

โดยการดำเนินการคำสั่งเหล่านี้คุณจะY / จัดเก็บเนื้อหาที่เลือก anking / การคัดลอกในทะเบียนและพี asting พวกเขาไปยังปลายทางที่เป็นกลุ่มขั้ว การลงทะเบียนพิเศษทั้งสองนี้+และ*แบ่งปันกับคลิปบอร์ดของระบบ (และด้วยเหตุนี้โปรแกรมอื่น ๆ อีกมากมายเช่นเว็บเบราว์เซอร์ gedit ฯลฯ ) การลงทะเบียน+นั้นเกี่ยวข้องกับการคัดลอก / วางบัฟเฟอร์และ*เกี่ยวข้องกับการเลือกบัฟเฟอร์ (อันที่แทรกสำเนาของการเลือกด้วยการคลิกตรงกลางบนช่องข้อความในพูดอูบุนตู) และสามารถวางโดยใช้ctrl + v( ctrl + shift + vบน gnome-terminal)


1

1) ใน Fedora ฉันใช้การตั้งค่าต่อไปนี้:

dnf install vim-X11

vim-X11 มาพร้อมกับการสนับสนุนคลิปบอร์ด - บางทีใน distros อื่น ๆ มันคล้ายกัน

2) ตั้งชื่อแทนใน. bashrc ของฉัน

alias vim="vimx"

3) ใน. vimrc:

set clipboard=unnamedplus

ตอนนี้ yank ปกติในกลุ่มจะเข้าไปในคลิปบอร์ดของระบบและ Ctrl-C ทุกตัวที่อยู่นอกกลุ่มจะถูกวางในกลุ่ม


0

หากคุณใช้ Mac (OSX) คุณสามารถติดตั้งbpcopy (โดยใช้brew install pbcopy --see http://brew.sh/สำหรับรายละเอียดเพิ่มเติม) จากนั้นรันคำสั่งต่อไปนี้ (commandline form แบบตรง) โดยไม่ต้องแตะเมาส์:

ตัวอย่าง:

1) ใน TERMINAL # 001 :

cat /tmp/stuff.txt | pbcopy

2) คุณสามารถสลับไปที่เทอร์มินัล # 002 (โดยไม่ต้องใช้เมาส์) โดยใช้ปุ่มลัดในตัวในแอปพลิเคชันเทอร์มินัลของ OSX: command+i

3) ใน TERMINAL # 002 : เปิดไฟล์ใหม่เป็นกลุ่ม

vi newfile

4) ใส่เสียงเรียกเข้าใน โหมดแทรกด้วยi

5) แทรกข้อความจากคลิปบอร์ดด้วยcommand+ V(เพื่อวางจากคลิปบอร์ดบน Mac)

6) เพลิดเพลินไปกับวันที่เหลือของคุณ!

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