ในกลุ่มเทอร์มินัลการวางข้อมูลคลิปบอร์ดมักจะทำให้โค้ดเยื้อง ฉันเพิ่งรู้ว่าฉันใช้:set paste
เยื้องไม่แตกสลาย แม้ว่าหลังจากวางข้อมูลแล้วฉันควรทำ:set nopaste
อีกครั้งหรือไม่ ถ้าฉันทำไม่ได้จะเกิดปัญหาอะไรขึ้น
ในกลุ่มเทอร์มินัลการวางข้อมูลคลิปบอร์ดมักจะทำให้โค้ดเยื้อง ฉันเพิ่งรู้ว่าฉันใช้:set paste
เยื้องไม่แตกสลาย แม้ว่าหลังจากวางข้อมูลแล้วฉันควรทำ:set nopaste
อีกครั้งหรือไม่ ถ้าฉันทำไม่ได้จะเกิดปัญหาอะไรขึ้น
คำตอบ:
ตามที่คนอื่นเขียนคุณไม่ต้องการออกจากชุด 'วาง' ฉันแค่อยากจะชี้ให้เห็นว่าด้วยเทอร์มินัลอีมูเลเตอร์ที่ดีและการคอมไพล์และกำหนดค่าอย่างเหมาะสมvim
คุณไม่จำเป็นต้องเปลี่ยน 'แปะ' คุณต้องมีโปรแกรมจำลองเทอร์มินัลที่ดีเช่น xterm หรือ GNOME Terminal, vim พร้อมคุณสมบัติ X11 ที่ให้มาและตัวเลือก 'เมาส์' ตั้งค่าเป็น 'a' จากนั้นvim
จะ "รู้" เมื่อคุณวางเมาส์และจะตั้งค่าและยกเลิกการตั้งค่าตัวเลือก 'วาง' สำหรับคุณ
วิธีหนึ่งในการรับ a vim
ด้วยคุณสมบัติ X11 คือการรันgvim
ด้วย-v
ตัวเลือกหรือสร้างชื่อแทน
alias vim='gvim -v'
จากนั้นก็ใส่
set mouse=a
ใน ~ / .vimrc ของคุณ
Copy
จะเป็นสีเทาหรือมองไม่เห็นเลยเว้นแต่ว่าได้เลือกข้อความบางส่วน คุณเลือกข้อความที่จะคัดลอกอย่างไร
โพสต์นี้มีคำตอบที่ฉันโปรดปราน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 ได้เช่นกันเพราะมีทางลัดต่างกันหรือไม่
ตามคำแนะนำของ romainl เอกสารอธิบายว่าการตั้งค่า'paste'
ตัวเลือกนั้นเป็นการปิดการใช้งานตัวเลือกอื่น ๆ และคุณจะพบว่าไม่ช้าก็เร็วจะทำให้เกิดปัญหาสำหรับคุณ ด้วยเหตุนี้จึงมี'pastetoggle'
ตัวเลือก ดู:
:help 'paste'
:help 'pastetoggle'
ถ้ามีบางสิ่งอยู่มันจะต้องมีความหมาย คุณควรดูเอกสาร vim ซึ่งมีประโยชน์มาก
:help 'paste'
:help 'pastetoggle'
เมื่อคุณอ่านคุณอาจต้องการสิ่งนี้:
" Toggle paste mode
" (prefer this over 'pastetoggle' to echo current state)
nmap <leader>p :setlocal paste! paste?<cr>
ฉันหวังว่าคุณจะพบโพสต์นี้มีประโยชน์ :)
IIRC เมื่อคุณเข้าไปในกลุ่ม, มันคิดว่าคุณพิมพ์ตัวละครเหล่านั้นทั้งหมดด้วยตัวเอง ดังนั้นหากเปิดการเยื้องอัตโนมัติมันจะเยื้องเนื้อหาให้คุณ แต่ข้อความที่วางมักจะมีการเยื้องอยู่แล้วดังนั้นการเยื้องจึงทำให้ "ยุ่งเหยิง" การสลับไปที่โหมดวางจะปิดสิ่งต่าง ๆ เช่นเยื้องอัตโนมัติ
หากคุณชอบการเยื้องอัตโนมัติตามที่คุณพิมพ์คุณควรสลับกลับไปเป็นแบบไม่ทำลายหลังจากวางเสร็จแล้ว ลองใช้และสังเกตว่าคุณต้องทำการเยื้องทั้งหมดด้วยตนเองในโหมดวางอย่างไร