ใช้เสมอ: วางชุดเป็นความคิดที่ดีหรือไม่?


19

ในกลุ่มเทอร์มินัลการวางข้อมูลคลิปบอร์ดมักจะทำให้โค้ดเยื้อง ฉันเพิ่งรู้ว่าฉันใช้:set pasteเยื้องไม่แตกสลาย แม้ว่าหลังจากวางข้อมูลแล้วฉันควรทำ:set nopasteอีกครั้งหรือไม่ ถ้าฉันทำไม่ได้จะเกิดปัญหาอะไรขึ้น


แล้วลองทำด้วยตัวเองล่ะ หรืออ่านเอกสาร ?
romainl

1
ดูเพิ่มเติม "วงเล็บวาง Mode" ในคำตอบของฉัน "รหัสวางลงในหน้าต่าง terminal เข้าไปเป็นกลุ่ม" stackoverflow.com/a/7053522/754997 หากเทอร์มินัลอีมูเลเตอร์ของคุณรองรับคุณสามารถจัดเรียงเพื่อบอกให้ Vim เปลี่ยนเป็น / จากโหมดวางโดยอัตโนมัติทุกครั้งที่คุณวางข้อความลงในเทอร์มินัล
Chris หน้า

1
@ ฉีดฉันพบว่าเป็นไปได้มากที่ทั้ง 1) พยายามและรอดูว่ามีผลกระทบเชิงลบของการใช้ set paste (+ - nopaste) และ 2) rtfm-ing (ในฐานะผู้ใช้ระดับล่างหรือระดับกลางเช่น OP) มีประโยชน์น้อยกว่าการถามผู้ที่มีประสบการณ์เกี่ยวกับตัวเลือกต่างๆ การถามที่นี่ดูเหมือนจะเป็นวิธีที่ฉลาดกว่าและการบันทึกสิ่งนี้จะช่วยผู้อื่น
belacqua

คำตอบ:


5

ตามที่คนอื่นเขียนคุณไม่ต้องการออกจากชุด 'วาง' ฉันแค่อยากจะชี้ให้เห็นว่าด้วยเทอร์มินัลอีมูเลเตอร์ที่ดีและการคอมไพล์และกำหนดค่าอย่างเหมาะสมvimคุณไม่จำเป็นต้องเปลี่ยน 'แปะ' คุณต้องมีโปรแกรมจำลองเทอร์มินัลที่ดีเช่น xterm หรือ GNOME Terminal, vim พร้อมคุณสมบัติ X11 ที่ให้มาและตัวเลือก 'เมาส์' ตั้งค่าเป็น 'a' จากนั้นvimจะ "รู้" เมื่อคุณวางเมาส์และจะตั้งค่าและยกเลิกการตั้งค่าตัวเลือก 'วาง' สำหรับคุณ

วิธีหนึ่งในการรับ a vimด้วยคุณสมบัติ X11 คือการรันgvimด้วย-vตัวเลือกหรือสร้างชื่อแทน

alias vim='gvim -v'

จากนั้นก็ใส่

set mouse=a

ใน ~ / .vimrc ของคุณ


เมื่อฉันตั้งค่า mouse = a ฉันไม่สามารถคัดลอกข้อความได้ "คัดลอก" เป็นสีเทาในเมนูคลิกขวาและในเมนูแอพ
Lee Daniel Crocker

@LeeDanielCrocker: Copyจะเป็นสีเทาหรือมองไม่เห็นเลยเว้นแต่ว่าได้เลือกข้อความบางส่วน คุณเลือกข้อความที่จะคัดลอกอย่างไร
garyjohn

เพียงแค่ใช้เมาส์ FYI, "y" ทำงานได้ดี ... ส่งข้อความและคัดลอกไปยังแป้นพิมพ์ของระบบ มันเป็นแค่เมนูที่ใช้ไม่ได้ หากตั้งค่าเมาส์เป็น "r" เมนูจะทำงาน แต่เมาส์จะมีหมายเลขบรรทัด ดังนั้นโดยรวมฉันสามารถอยู่กับเม้าส์ = a ฉันต้องจำเอาไว้แทนการทำสำเนา
Lee Daniel Crocker

7

โพสต์นี้มีคำตอบที่ฉันโปรดปรานhttps://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode

โดยทั่วไปถ้าคุณเริ่มในโหมดแทรกและใช้ Ctrl + Shift + V หรือคลิกขวาวางด้วยเมาส์ของคุณ Vim ตรวจพบว่าสิ่งนี้มาจากเทอร์มินัลและตั้งค่าโหมดการวางโดยอัตโนมัติ (ซึ่งไม่สามารถทำงานในโหมดวางได้เนื่องจากการเขียนข้อมูลดิบ) และคุณกลับสู่สถานะ "สติ" เมื่อเสร็จสิ้น

สำหรับเสียงเรียกเข้า (ใส่ใน. vimrc ของคุณ)

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

หากคุณใช้เป็นกลุ่มภายใต้ Tmux (ยังคงอยู่ใน. vimrc)

function! WrapForTmux(s)
  if !exists('$TMUX')
    return a:s
  endif

  let tmux_start = "\<Esc>Ptmux;"
  let tmux_end = "\<Esc>\\"

  return tmux_start . substitute(a:s, "\<Esc>", "\<Esc>\<Esc>", 'g') . tmux_end
endfunction

let &t_SI .= WrapForTmux("\<Esc>[?2004h")
let &t_EI .= WrapForTmux("\<Esc>[?2004l")

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

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

ฉันถือว่าหนึ่งในlet &t_SI .= "\<Esc>[?xxxxx"บรรทัดกำลังตรวจจับแป้นพิมพ์ลัดวางหรือไม่ ใช้งานกับ mac ได้เช่นกันเพราะมีทางลัดต่างกันหรือไม่
doub1ejack

@ doub1ejack สิ่งเหล่านี้ตรวจจับ Xterm escape sequences ไม่ใช่วิธีที่ถูกเรียก (เช่น 2004h เป็น paste เริ่มต้น) ตราบใดที่เทอร์มินัลของคุณรองรับ Xterm keycodes และส่งผ่านไปยัง Vim ควรทำงานได้ดีบน Mac
dragon788

พระเจ้าช่วย. คุณคือฮีโร่ของฉัน ฉันพิมพ์ไปแล้ว: ตั้ง nopaste หลาย ๆ ครั้ง
maxwell

3

ตามคำแนะนำของ romainl เอกสารอธิบายว่าการตั้งค่า'paste'ตัวเลือกนั้นเป็นการปิดการใช้งานตัวเลือกอื่น ๆ และคุณจะพบว่าไม่ช้าก็เร็วจะทำให้เกิดปัญหาสำหรับคุณ ด้วยเหตุนี้จึงมี'pastetoggle'ตัวเลือก ดู:

:help 'paste'
:help 'pastetoggle'

1

ถ้ามีบางสิ่งอยู่มันจะต้องมีความหมาย คุณควรดูเอกสาร vim ซึ่งมีประโยชน์มาก

  :help 'paste'
  :help 'pastetoggle'

เมื่อคุณอ่านคุณอาจต้องการสิ่งนี้:

" Toggle paste mode
"   (prefer this over 'pastetoggle' to echo current state)
nmap <leader>p :setlocal paste! paste?<cr>

ฉันหวังว่าคุณจะพบโพสต์นี้มีประโยชน์ :)


1

IIRC เมื่อคุณเข้าไปในกลุ่ม, มันคิดว่าคุณพิมพ์ตัวละครเหล่านั้นทั้งหมดด้วยตัวเอง ดังนั้นหากเปิดการเยื้องอัตโนมัติมันจะเยื้องเนื้อหาให้คุณ แต่ข้อความที่วางมักจะมีการเยื้องอยู่แล้วดังนั้นการเยื้องจึงทำให้ "ยุ่งเหยิง" การสลับไปที่โหมดวางจะปิดสิ่งต่าง ๆ เช่นเยื้องอัตโนมัติ

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

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