คัดลอกข้อความจากบานหน้าต่าง tmux หนึ่งไปยังอีกบานหนึ่ง (ใช้เป็นกลุ่ม)


133

ฉันมีสองไฟล์ที่เปิดเป็นกลุ่มแต่ละไฟล์ในหนึ่งบานหน้าต่าง tmux ฉันต้องการคัดลอกสมมติว่า 10 บรรทัดจากไฟล์หนึ่งไปยังอีก

ฉันจะทำสิ่งนี้สำเร็จโดยไม่ใช้เมาส์Copy-> ได้Pasteอย่างไร


2
คุณอาจเกี่ยวข้องกับtmuxแต่โดยทั่วไปมีวิธีที่ง่ายกว่า อินสแตนซ์ Vim ทั้งสองอยู่ในเครื่องเดียวกัน (ในเครื่องหรือไม่)? โดยปกติแล้วฉันจะใช้ไฟล์ชั่วคราวสำหรับสิ่งนั้น (เช่นเลือกเส้นสายตา:w /tmp/linesจากนั้น:r /tmp/linesในอีกกรณี) หรือถ้า Vim ของคุณรู้วิธีพูดคุยกับคลิปบอร์ดระบบของคุณคุณสามารถใช้+หรือ*ลงทะเบียนเพื่อหลีกเลี่ยงไฟล์ชั่วคราว
Chris Johnsen

คำตอบ:


193

คุณจะต้องใช้ทางลัด tmux สมมติว่าทางลัดคำสั่ง tmux ของคุณเป็นค่าเริ่มต้น: Ctrl+ bจากนั้น:

  1. Ctrlโหมดป้อน+ b, [คัดลอก (?)

  2. เลื่อนไปที่จุดเริ่มต้น / สิ้นสุดข้อความเพื่อเน้น

  3. Ctrlspace

    เริ่มเน้นข้อความ (บน Arch Linux) เมื่อฉันรวบรวม tmux จากซอร์สบน OSX และ Linux อื่น ๆSpaceโดยปกติแล้วมันจะใช้งานได้ ข้อความที่เลือกเปลี่ยนสีดังนั้นคุณจะรู้ว่าคำสั่งทำงาน

  4. เลื่อนไปที่ด้านตรงข้ามของข้อความเพื่อคัดลอก

  5. Alt+ wคัดลอกข้อความที่เลือกไปยังคลิปบอร์ด tmux (สำหรับ Mac ให้ใช้Esc+ w.)

  6. เลื่อนเคอร์เซอร์ไปที่บานหน้าต่างตรงข้าม tmux หรือหน้าต่าง tmux ที่แตกต่างอย่างสิ้นเชิง วางเคอร์เซอร์ที่คุณต้องการวางข้อความที่คุณเพิ่งคัดลอก

  7. Ctrl+ b, ]วางข้อความที่คัดลอกมาจากคลิปบอร์ด tmux

tmux ค่อนข้างดีที่คำสั่งการแมปไปยังแป้นพิมพ์ลัดที่กำหนดเอง

ดูCtrl+ b, ?สำหรับรายการเต็มรูปแบบของชุดแป้นพิมพ์ลัด


4
ขอบคุณ เพียงแค่ sidenode: Alt + w ไม่ทำงานบน Mac Alt ถูกแมปกับ Esc โดยค่าเริ่มต้น ดังนั้นมันจึงเป็น Esc + w
Karan

11
หากคุณใช้screenทางลัด: Ctrl + A [(เข้าสู่โหมดคัดลอก), Space(เริ่มการไฮไลต์), Enter(การไฮไลต์ที่สิ้นสุด), Ctrl + A ](วาง)
jfs

11
น่าสังเกตว่า "ป้อน" ใช้งานได้สำหรับฉันในขณะที่ alt + w ไม่ทำงาน
Elijah Lynn

3
ดังที่ระบุไว้ในawhan.wordpress.com/2010/06/20/copy-paste-in-tmuxหากคุณมีการเชื่อมโยงคีย์ vi ควรแทนที่ขั้นตอนที่ 5 ด้วยEnterคีย์
Ying Xiong

3
จะทำอย่างไรถ้าฉันต้องการคัดลอกและวางข้อความในโปรแกรมแก้ไขข้อความ ด้วยเหตุผลบางอย่างดูเหมือนว่าจะไม่ได้รับข้อความที่เลือกแม้หลังจากกด 'Enter' หลังจากเลือกข้อความ
2560

33

น่าเสียดายที่ฉันยังไม่สามารถเพิ่มความคิดเห็นในคำตอบของ Alex Leach ดังนั้นฉันจะรวมภาคผนวกที่นี่สำหรับผู้ใช้ Mac OS X:

  1. Enter คัดลอกข้อความที่เลือก

1
ขอบคุณ! ฉันใช้งาน Ubuntu Xenial โดยใช้byobu/ tmuxด้วยการตั้งค่าเริ่มต้นทั้งหมดใช้งานได้ Alt + w ไม่ทำงาน
Andrea Zonca

1
สิ่งนี้ใช้ไม่ได้กับ OS X Yosemite ด้วย tmux 2.0 หรือ alt + w หรือ esc + w :(
weberc2

ทำงานได้ดีสำหรับฉันบน Windows ด้วยเทอร์มินัล Zoc
jdhao

15

หากคุณใช้ vim และ tmux บน macOS (ทดสอบบน macOS 10.12.2, tmux 2.3):

(สมมติว่าคีย์ผสมของprefixส่วนนำหน้าของ tmux คือส่วนนำหน้าคือctrl+ bในค่าเริ่มต้น)

  • สำเนา:
    1. กดprefix+ [เพื่อเข้าสู่โหมดถ่ายสำเนา
    2. ใช้ปุ่มลูกศรเพื่อไปที่จุดเริ่มต้น / สิ้นสุดของการเลือกข้อความ
    3. กดctrl+ space(หากคุณตั้งctrl+ spaceเป็นคำนำหน้าให้กดctrl+ space+ spaceแทน)
    4. ใช้ปุ่มลูกศรเพื่อเลื่อนไปยังอีกด้านของการเลือก
    5. กด+ctrlw
  • วาง:
    1. กดprefix+ ]ในโหมดแทรก

8

ฉันกำลังเชื่อมต่อกับเซิร์ฟเวอร์ CentOS ของฉันบนเครื่อง Windows โดยใช้ZOC terminalของลูกค้าZOC นี่คือสิ่งที่ได้ผลสำหรับฉัน:

  • เข้าสู่โหมดคัดลอก: <prefix>+[
  • เริ่มคัดลอก: <Space>
  • คัดลอกข้อความ: <Enter>
  • วางข้อความ: <prefix>+]

2

คุณสามารถใช้บอร์ดคลิประบบด้วย "* y และ" * p แทนที่จะใช้ y และ p ปกติ


1
ในการใช้คลิปบอร์ดระบบคุณต้องใช้"+2yy- คัดลอกสองบรรทัดไปที่คลิปบอร์ด X11 "+dd- ตัดเส้นไปที่คลิปบอร์ด X11 "+p- วางคลิปบอร์ด X11
Patryk

ฉันต้องพิมพ์อะไรก่อนที่จะใช้คำสั่งเหล่านี้หรือไม่
โทมัส Ahle

@ThomasAhle ไม่มี .. ของตัวอักษรคำพูดคู่ ( ") ตามด้วยบวก (+) ตามด้วย 2ys (y). ให้แน่ใจว่าคุณอยู่ในโหมดปกติ. ถ้าคุณอยู่ในโหมดปกติคุณควรจะสามารถที่จะใช้h,j,k,lในการ ย้ายฉันเคยเห็นบางครั้งบน ubuntu VM ของฉัน "+" การลงทะเบียนหายไปโดยไม่ทราบสาเหตุเพื่อตรวจสอบว่าคุณมีการ+ลงทะเบียนคุณสามารถพิมพ์:regและตรวจสอบว่ามีสตริง"+ในคอลัมน์แรกหรือไม่
alpha_989

ใช่นี่คือคำตอบนี้ ง่ายกว่าที่คนอื่น ๆ แนะนำ (ใช้ tmux copy / paste) และนี่จะไม่ทำให้หมายเลขบรรทัดสกปรก สิ่งนี้จะทำให้เกิดปัญหาใด ๆ หรือไม่หากคุณทำการแมปมาตรฐานyและpไปที่"+yและ"+pหรือไม่
ไรอัน

1

หากคุณvimเปิดไว้จะเป็นการดีกว่าถ้าใช้ vim copy paste เพื่อคัดลอกข้อความ

Tmux copy paste จะทำงานได้อย่างไรก็ตามมีข้อเสียหลายประการ

ขั้นแรกเมื่อคัดลอกข้อความหลายบรรทัดคุณจะต้องเลือกหลายบรรทัด Tmux copy paste โดยทั่วไปไม่เข้าใจว่าvimมีหมายเลขบรรทัดหรือมีเครื่องหมายในร่อง gim (เช่นหมายเลขสัมพัทธ์ / หมายเลขสัมบูรณ์) เป็นผลให้มันจะคัดลอกเหล่านั้นเช่นกัน

ประการที่สองฉันได้พบว่าถ้าข้อความมีการจัดรูปแบบเฉพาะบางภาษาและคุณพยายามคัดลอกวางโดยใช้ tmux ไปเป็นกลุ่มนั้นจะทำให้การจัดรูปแบบยุ่งเหยิง set paste!นี้สามารถหลีกเลี่ยงโดยใช้ อย่างไรก็ตามสิ่งนี้ต้องใช้งานมากขึ้น

ใช้"+yเพื่อคัดลอกและ"+pวาง

Vimกำเนิดมีวิธีการคัดลอกวางระหว่างบัฟเฟอร์เป็นกลุ่มและคลิปบอร์ดระบบโดยใช้อย่างใดอย่างหนึ่งหรือ"+y "*yแล้ววางใช้หรือ"+p "*pการทำเช่นนี้จะเป็นการคัดลอกตัวเลขที่เกี่ยวข้องในรางน้ำหรือเครื่องหมายสุ่มอื่น ๆ ซึ่งไม่เกี่ยวข้องกับเสียงเรียกเข้า


0

คู่ของตัวเลือกสำหรับการใช้ vim เนื่องจากลำดับทางลัด tmux ค่อนข้างยาวและฉันคิดว่ามันยากที่จะจำ

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

set clipboard=unamed "sets the default copy register to be *
set clipboard=unamedplus "sets the default copy register to be +

แหล่งที่มาสำหรับคำสั่งคลิปบอร์ด: https://vi.stackexchange.com/questions/84/how-can-i-copy-text-to-the-system-clipboard-from-vim

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