vim cut & paste ไม่ทำงานใน Stretch / Debian 9


32

อัพเกรดเซิร์ฟเวอร์ VM เป็น Debian 9 ที่นี่

ตอนนี้เมื่อใช้sshเราไม่สามารถคัดลอกและวางระหว่างเทอร์มินัลระยะไกล

ดูเหมือนว่าเคอร์เซอร์กำลังเคลื่อนไหวและทำเครื่องหมายข้อความแม้ว่าจะเป็นวิธีที่สนุกกว่าหรือแตกต่างจากปกติ แต่ไม่มีอะไรถูกคัดลอกไปยังคลิปบอร์ดเมื่อทำ command-C / command-V หรือคัดลอกและวางในเมนูที่เกี่ยวข้อง .

นอกจากนี้เรายังลองทำการเคลื่อนไหวของเมาส์ด้วย Shift และชุดแป้นพิมพ์อื่น ๆ โดยไม่มีผลลัพธ์ที่เป็นบวก

สิ่งนี้เกิดขึ้นใน OS / X คือ Sierra และ El Capitan และใน Windows โดยใช้ mobaXterm terminal ด้วย

สถานการณ์นี้เกิดจากการตระหนักถึงการใช้เมาส์

ตามคำถามอื่น ๆ ใน Stack Overflow ฉันสร้าง/etc/vim/vimrc.localด้วยset mouse="r"และset mouse="v; มันไม่ได้ผลดี

ในที่สุดการตั้งค่าset mouse=""ในไฟล์เดียวกันโดยมีความสำเร็จปานกลาง

อย่างไรก็ตามมันยังใช้งานไม่ได้ 100% มีอะไรอีกบ้างที่สามารถทำได้


ทำไมคุณต้องการปิดการสนับสนุนเมาส์ บน Windows ฉันสามารถคัดลอกและวางได้ดีในเซสชันฉาบ คุณใช้เทอร์มินัลอีมูเลเตอร์ใดบน Mac
Alexej Magura

2
เทอร์มินัลปกติ + ไบนารี ssh ที่มาโดยค่าเริ่มต้น เพื่อนร่วมงานอีก 2 คนบ่น ... พวกเขาเป็นเซิร์ฟเวอร์เสมือนที่ไม่มีหัวทุกคนมีโหมดข้อความเท่านั้น การตัดและแปะการทำงานไม่ถูกต้องเป็นเรื่องใหญ่สำหรับเรา
Rui F Ribeiro

ฉันขอแนะนำให้ใช้บางอย่างเช่นiTerm2ฉันคิดว่านั่นเป็นโปรแกรมจำลองเทอร์มินัลตัวเดียวที่ฉันใช้นอกเหนือจากเทอมย้อนยุคที่คุณสามารถหาได้ใน Apple store แต่ฉันจำไม่ได้ว่ามีใครคัดลอกและวางทับ ssh อย่างไรก็ตามคุณควรจะสามารถคัดลอกการเลือกหน้าจอได้ อย่างไรก็ตามฉันจำได้ว่ามีปัญหาเมื่อพยายามคัดลอกอึจากเทอร์มินัลไปยังระบบฉันเขียนฟังก์ชันมากมายใน. zshrc ของฉันเพื่อช่วยอำนวยความสะดวก แต่ฉันไม่แน่ใจว่านั่นคือสิ่งที่คุณกำลังมองหาจริงๆ สำหรับ.
Alexej Magura

1
อาจมีใครบางคนสามารถส่งคำขอเพื่อย้อนกลับการเปลี่ยนแปลงนี้ (ในเดเบียน?) เพื่อกลับmouse=โหมด
steffen

คำตอบ:


36

การแก้ปัญหาคือในความเป็นจริงการตั้งค่าตัวเลือกที่จะmouse=amouse=r

ปัญหาในการตั้งค่านี้/usr/share/vim/vim80/defaults.vimตามคำตอบที่ได้รับการยอมรับกล่าวคือมันจะถูกเขียนทับในการอัพเดททุกครั้ง ฉันค้นหาเป็นเวลานานและจบลงด้วยสิ่งนี้: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074

โซลูชันในวิธีแรกคือการใช้ไฟล์. vmrc แบบโลคัลและตั้งค่าที่นั่น ดังนั้นคุณสามารถสร้าง local .vimrc ( ~/.vimrc) สำหรับผู้ใช้ทุกคนและตั้งค่าตัวเลือกของคุณได้ หรือสร้างหนึ่งใน/etc/skelดังนั้นมันจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับผู้ใช้ใหม่ทุกคนที่คุณสร้าง

แต่เมื่อคุณใช้ไฟล์. vmrc แบบโลคอลคุณจะต้องตั้งค่าตัวเลือกทั้งหมดที่นั่นเพราะหากมีไฟล์ใน.vimrcตัวเครื่องdefaults.vimจะไม่โหลดเลย! และถ้าไม่มีท้องถิ่น.vimrcการตั้งค่าทั้งหมดของคุณจะถูกเขียนทับ beeing defaults.vimจาก

ฉันต้องการการกำหนดค่าส่วนกลางสำหรับผู้ใช้ทั้งหมดซึ่งโหลดตัวเลือกเริ่มต้นแล้วเพิ่มหรือเขียนทับค่าเริ่มต้นด้วยการตั้งค่าส่วนบุคคลของฉัน โชคดีที่มีตัวเลือกสำหรับว่าใน Debian การจะถูกโหลดหลังจากที่/etc/vim/vimrc.local /etc/vim/vimrcดังนั้นคุณสามารถสร้างไฟล์นี้และปล่อยให้ค่าเริ่มต้นถูกโหลดป้องกันไม่ให้ถูกโหลดอีกครั้ง (ตอนท้าย) แล้วเพิ่มตัวเลือกส่วนตัวของคุณ:

กรุณาสร้างไฟล์ต่อไปนี้: /etc/vim/vimrc.local

" This file loads the default vim options at the beginning and prevents
" that they are being loaded again later. All other options that will be set,
" are added, or overwrite the default settings. Add as many options as you
" whish at the end of this file.

" Load the defaults
source $VIMRUNTIME/defaults.vim

" Prevent the defaults from being loaded again later, if the user doesn't
" have a local vimrc (~/.vimrc)
let skip_defaults_vim = 1


" Set more options (overwrites settings from /usr/share/vim/vim80/defaults.vim)
" Add as many options as you whish

" Set the mouse mode to 'r'
if has('mouse')
  set mouse=r
endif

(โปรดทราบว่า$VIMRUNTIMEใช้ในข้อมูลโค้ดด้านบนมีค่า/usr/share/vim/vim80/defaults.vimดังนี้)

หากคุณต้องการเปิดใช้งาน "การคัดลอก / วางพฤติกรรมเก่า" ให้เพิ่มบรรทัดต่อไปนี้ที่ท้ายไฟล์นั้นด้วย:

" Toggle paste/nopaste automatically when copy/paste with right click in insert mode:
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

4
นี่ควรเป็นคำตอบที่ยอมรับได้ นอกจากนี้จากรายงานข้อผิดพลาดที่เชื่อมโยงของคุณฉันคิดว่าเราสามารถไปด้วยsource $VIMRUNTIME/defaults.vimได้
อะลาสแด

1
ในที่สุดก็สามารถนำไปใช้งานได้อย่างยอดเยี่ยมและยอดเยี่ยม! +1
Rui F Ribeiro

2
ยังคงทำงานใน Debian 10 เพียงแค่ใช้ซอร์ส /usr/share/vim/vim81/defaults.vim
Rui F Ribeiro

25

วิธีหนึ่งในการตัดเสียงเรียกเข้าจากการรับรู้ของเมาส์น่าจะเป็นการแสดงความคิดเห็นการกำหนดค่าเกี่ยวกับเมาส์

ใน/usr/share/vim/vim80/defaults.vimฉันแสดงความคิดเห็นออกการตรวจสอบเฉพาะเมาส์ใน:

" In many terminal emulators the mouse works just fine.  By enabling it you
" can position the cursor, Visually select and scroll with the mouse.
"if has('mouse')
"  set mouse=r
"endif

(ในไฟล์คอนฟิกูเรชัน vim เหล่านั้น "กำลังเริ่มต้นความคิดเห็น)

การเปลี่ยนแปลงช่วยให้เราสามารถคัดลอกและวางอีกครั้งโดยไม่มีปัญหาใด ๆ

ฉันเห็นด้วยกับความคิดเห็นนี้ไม่ใช่วิธีแก้ปัญหาในอุดมคติเนื่องจากมีการเขียนทับลงในการปรับปรุงใด ๆ เว้นแต่ว่าไฟล์การกำหนดค่าจะได้รับการป้องกัน (หรือเบี่ยงเบน) ในขณะนั้นและเนื่องจากเฉพาะรุ่นของแพ็คเกจหรือการกำหนดค่าเซิร์ฟเวอร์ที่ฉันเคยทำงานมันเป็นสิ่งเดียวที่ทำงานได้ ดังนั้นฉันจึงออกจากคำตอบนี้และควรใช้เป็นทางเลือกสุดท้ายเท่านั้น


2
IMO นี่เป็นคำตอบที่ไม่ดี! การกระตุ้นให้ผู้ใช้แก้ไขไฟล์ที่จัดการโดยการจัดการแพ็คเกจมีแนวโน้มที่จะทำลายสิ่งต่าง ๆ โดยไม่คาดคิดในอนาคต @ I-GaLaXy- คำตอบที่ดีกว่า
Jeremy Davis

1
@JeremyDavis ฉันเห็นด้วยกับคุณนี่ไม่ใช่ทางออกที่ดีที่สุด ในเวลานั้นมันเป็นสิ่งเดียวที่ทำงานได้ด้วยเหตุผลที่ไม่ทราบสาเหตุบางอย่างและฉันลองใช้หลายวิธี อย่างไรก็ตามมีมากกว่าหนึ่งคนที่กำลังบอกวิธีแก้ไขปัญหาอื่น ๆ ให้กับฉันในปัจจุบันฉันยอมรับว่ามันเป็นคำตอบที่ถูกต้อง ฉันใช้ความหลากหลายในเวลานั้นและไฟล์การกำหนดค่าไม่ได้ถูกเขียนทับ แต่นั่นก็ไม่ใช่วิธีที่ดีที่สุด
Rui F Ribeiro

11

เอกสารที่เป็นกลุ่มสำหรับmouseตัวเลือกกล่าวว่า

การจัดการ xterm ของปุ่มเมาส์ยังคงสามารถใช้งานได้โดยกดปุ่ม Shift ค้างไว้


ขอบคุณสำหรับสิ่งนั้น ฉันใช้ Vim มาหลายปีแล้วและไม่ได้ตระหนักถึงคุณลักษณะนั้น ฉันได้แก้ไขคำถามของคุณเพื่อรวมฟีเจอร์การจัดรูปแบบที่มีอยู่ให้มากขึ้น ยินดีต้อนรับสู่Unix & Linux !
Anthony G - ความยุติธรรมสำหรับโมนิก้า

1
ปัญหาคือว่าฉันกำลังใช้ Terminal ใน Mac และตัวดำเนินการของฉัน putty / mobaXterm ใน Windows ... ไม่ใช่ xterm
Rui F Ribeiro

3

คุณสามารถปิดใช้งานสิ่งนี้ได้โดยไม่ต้องแก้ไขไฟล์ระบบโดยการสร้าง/etc/vimrc.localและแทรกสิ่งต่อไปนี้:

set mouse=

ในช่วงเวลาเบต้ามันไม่ทำงานอย่างสม่ำเสมอจะตรวจสอบอีกครั้งขอบคุณ
Rui F Ribeiro

2
สิ่งนี้ใช้ไม่ได้
LtWorf

ดูคำตอบของ I-GaLaXy-I ด้านบน คุณต้องนำเข้า defaults.vim อย่างชัดเจนและป้องกันไม่ให้มีการนำเข้า
richard

มันใช้ได้ดีสำหรับฉันด้วยแม้ว่าฉันจะรวมเข้ากับคำตอบของ @ I-GaLaXy-I (เช่นแก้ไข / สร้าง /etc/vim/vimrc.local)
Jeremy Davis

ทำงานได้ดีสำหรับฉันในขณะที่อยู่ในตู้คอนเทนเนอร์เดเบียน 9 ... เพียงแค่ใส่ลงใน ~ /
.vimrc

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