Vi & Vim

คำถามและคำตอบสำหรับผู้ที่ใช้ตระกูล vi และ Vim ของเครื่องมือแก้ไขข้อความ

3
ฉันจะใช้หมายเลขบรรทัดสัมพัทธ์ในโหมดบรรทัดคำสั่งได้อย่างไร
เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้จากPractical Vimวิธีการคัดลอกหรือย้ายบล็อกของบรรทัดโดยไม่ต้องเลื่อนเคอร์เซอร์จากตำแหน่งปัจจุบัน สิ่งนี้จะทำในโหมดบรรทัดคำสั่ง เช่น :123,133m. # moves lines from 123 to 133 below the cursor position. ในขณะที่ฉันชอบมันเป็นความเจ็บปวดที่จะพิมพ์หมายเลขบรรทัดยาวโดยเฉพาะเมื่อไฟล์มีจำนวนบรรทัดมากเกินไป ในบางครั้งเส้นที่จะย้ายค่อนข้างใกล้เคอร์เซอร์ (แต่ฉันไม่ต้องการเลื่อนเคอร์เซอร์ของฉันงัดแงะกลับมาที่ที่ฉันเคยแปะ!) มันจะดีมากถ้าฉันสามารถใช้หมายเลขสัมพัทธ์คล้ายกับที่เราทำในโหมดปกติ มันก็เหมือนกับการพูด ย้าย 5 บรรทัดซึ่งเป็น 10 บรรทัดเหนือบรรทัดปัจจุบันไปที่นี่ ในระยะสั้นวิธีการใช้หมายเลขญาติในโหมดบรรทัดคำสั่ง (คล้ายกับโหมดปกติ)?

1
ฉันจะให้ทั้งสองแยกเพื่อเลื่อนไปทางซ้ายหรือขวาพร้อมกันได้อย่างไร
ฉันต้องการเปิดเอกสารสองส่วนที่แตกต่างกันในการแยกแนวนอน (โดยใช้:sp) และเลื่อนทั้งคู่ไปทางซ้ายและขวาพร้อมกัน scrollbindสำหรับการเลื่อนแนวตั้งที่คุณจะใช้ อย่างไรก็ตามฉันไม่แน่ใจว่าจะใช้อะไรในการเลื่อนแนวนอน ฉันรู้ว่าความสามารถต้องพร้อมใช้งานเพราะเมื่อฉันใช้vimdiffมันจะเลื่อนในแนวนอนในเอกสารทั้งสองในเวลาเดียวกัน
16 split  scrolling 

1
แท็บบางส่วนเหมือนทุบตีสมบูรณ์สำหรับชื่อไฟล์ใน Vim
ใน Bash เมื่อมีหลายไฟล์ที่มีคำนำหน้าเหมือนกันและฉันพิมพ์ส่วนหนึ่งของคำนำหน้าและการเข้าชมTabมันจะทำให้คำนำหน้าทั่วไปสมบูรณ์และอนุญาตให้ฉันพิมพ์ต่อไปเพื่อแยกความแตกต่างระหว่างผลลัพธ์ที่เป็นไปได้ ในกลุ่มเมื่อมีหลายไฟล์ที่มีคำนำหน้าเหมือนกันและฉันพิมพ์ส่วนหนึ่งของคำนำหน้าและการเข้าชมTabมันจะเสร็จสิ้นการแข่งขันครั้งแรกทั้งหมดและให้ฉันเลือกระหว่างการแข่งขันทั้งหมด เพื่อลดการตั้งค่าฉันต้องถอยกลับจนกว่าฉันจะไปถึงจุดสิ้นสุดของส่วนทั่วไปจากนั้นพิมพ์บางอย่างเพิ่มเติมและกดTabอีกครั้ง ฉันมักจะมีไฟล์จำนวนมากที่มีคำนำหน้าทั่วไปที่ยาวและไฟล์ที่ฉันต้องการไม่ใช่ไฟล์แรก (ตัวอย่างเช่นไดเรกทอรีของไฟล์โครงการที่มีหลายสิ่งหลายอย่าง makefiles ต่าง ๆ ล้วนมีชื่อMakefile.{whatever}) ฉันจะทำให้ Vim สมบูรณ์ยิ่งขึ้นเช่น Bash เพื่อประหยัดการกดปุ่มจำนวนมากได้หรือไม่? โบนัสหากสิ่งนี้สามารถนำไปใช้กับความสำเร็จอื่น ๆ เช่นกัน (ตัวอย่างเช่นค่า enum ที่ทุกคนมีคำนำหน้าเหมือนกัน)

1
ป้องกัน Vim ไม่ให้แบ่งลิงก์กลางแท็กใน markdown
สมมติว่าฉันมีไฟล์ Markdown นี้: [Lorem ipsum dolor sit ](http://vi.stackexchange.com/many-links-are-often-very) ดูดี แต่การเชื่อมโยงยังไม่เสร็จสิ้นดังนั้นฉันจึงพิมพ์-longและตอนนี้กลุ่มจะแบ่งบรรทัด: [Lorem ipsum dolor sit ](http://vi.stackexchange.com/many-links-are-often-very-long) เนื่องจากtextwidth=80การตั้งค่าของฉัน... ในขณะที่การแบ่งลิงก์กลางแท็กเป็นเครื่องหมายที่ถูกต้องในทางเทคนิคมันดูเหมือน IMHO ที่ไม่น่าดูมาก การมีไฟล์ต้นฉบับที่ดูดีเป็นจุดเรียง ด้วยgqปัญหามักจะเลวร้ายยิ่ง: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec [Lorem ipsum dolor sit](http://vi.stackexchange.com/many-links-are-often-very-very-long) กลายเป็นสิ่งนี้: …

4
ตั้งค่าตัวเลือกการวาง แต่สำหรับการแทรกเพียงครั้งเดียวเท่านั้น
ฉันต้องการวิธีที่รวดเร็วในการตั้งค่า'paste'ตัวเลือกVim การแทรกข้อความบางส่วนและเปลี่ยนเป็นค่าก่อนหน้า'paste'เป็น กรณีการใช้งานทั่วไปแทรกเนื้อหาคลิปบอร์ดของระบบปฏิบัติการอย่างแท้จริงโดยไม่คำนึงถึงการเขียนโหมดแทรกใด ๆ ที่อาจใช้งานเช่นการเยื้องอัตโนมัติและโดยไม่ต้องเปลี่ยนสถานะของ Vim อีกกรณีการใช้งานคือการอนุญาตให้มีคุณสมบัติแมโคร OS เพื่อแทรกการกดแป้นพิมพ์เป็นกลุ่มและให้พวกเขาตีความเป็นข้อความตามตัวอักษร เห็นได้ชัดว่านี่เป็นการสรุปให้กับตัวเลือกอื่น ๆ - แนวคิดทั่วไปคือการตั้งค่าตัวเลือกบางอย่าง แต่สำหรับระยะเวลาหนึ่งการเดินทางผ่านโหมดแทรก โดยทั่วไปฉันต้องการผูกลำดับสำคัญ (พูด_i) กับมาโครที่ทำสิ่งนี้ :set paste i…<Esc> :set nopaste โดยที่i…<Esc>ฉันหมายถึงเปลี่ยนเป็นโหมดแทรก (เช่นเดียวกับiคำสั่ง) และกลับมาโครเมื่อกลับสู่โหมดคำสั่งยกเว้นว่าฉันต้องการที่จะจบลงด้วยการ'paste'ยังคงใช้งานอยู่หากมันใช้งานอยู่ก่อน ฉันจะทำสิ่งนี้ได้อย่างไร หมายเหตุ: เนื้อหาของคลิปบอร์ด OS ที่ถูกแมปไปลงทะเบียน"* เมื่อใช้งานได้'paste'ตัวเลือกจะไม่มีประโยชน์มาก สถานการณ์ที่สร้างแรงจูงใจสำหรับคำถามนี้สำหรับช่วงเวลาที่ไม่ตรงตามเงื่อนไขสำหรับ"*การสนับสนุนการลงทะเบียน - Vim ไม่ได้รวบรวม+xterm_clipboardคุณสมบัติหรือกำลังทำงานในเทอร์มินัลเช่นหน้าจอหรือ SSH เหนือซึ่งแยกจากเซิร์ฟเวอร์ X แวดล้อม

2
ปิดใช้งานการเน้นไวยากรณ์ขึ้นอยู่กับขนาดไฟล์และประเภท
ฉันมักจะต้องแก้ไขไฟล์ XML ต่าง ๆ ด้วย vim ซึ่งมีขนาดแตกต่างกันมาก - จากไฟล์การกำหนดค่าที่มีบรรทัด hunded สองสามบรรทัดไปยังไฟล์ข้อมูลการผลิตที่มีขนาดสูงสุด 2GB แน่นอนว่าการเปิดใช้งานการเน้นไวยากรณ์เป็นความคิดที่แย่มากเมื่อจัดการกับไฟล์ขนาดใหญ่ดังนั้นฉันจึงต้องการปิดใช้งานหากไฟล์มีขนาดใหญ่กว่าเกณฑ์ ฉันไม่สามารถใช้งานautocommandได้โดยตรงเพื่อปิดใช้งานการเน้นไวยากรณ์เนื่องจากคำสั่งถูกเรียกใช้ก่อนที่จะเปิดใช้งานไวยากรณ์เมื่อเริ่มต้น vim จากเชลล์: " this autocmd has no effect except for the echo: autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif ฉันพบวิธีแก้ปัญหาในการที่ฉันสามารถปิดใช้งานการเน้นไวยากรณ์ทั่วโลกจากนั้นเปิดอีกครั้งสำหรับไฟล์ประเภทอื่นทั้งหมดกว่า xml และเปิดใช้งานสำหรับ filetype xml หากไฟล์ไม่ใหญ่กว่าเกณฑ์: syntax off autocmd …

2
ทำให้บานหน้าต่างปรับขนาดเมื่อปรับขนาดหน้าต่างโฮสต์
ฉันชอบใช้ vimdiff เป็นเครื่องมือคอมไพล์ / คอมไพล์ git ปัญหาคือเมื่อฉันปรับขนาดหน้าต่างเทอร์มินัลโฮสต์ให้มีขนาดใหม่: จากบานหน้าต่างแยกสองอันเหลืออยู่ที่ความกว้างเท่าเดิมในขณะที่ด้านขวาสุดจะขยายเป็นขนาดหน้าต่างเต็ม มีคำสั่งให้แยกความกว้างเท่ากันหลังจากที่หน้าต่างได้รับการปรับขนาด? หรือการตั้งค่าที่ทำให้บานหน้าต่างมีขนาดเท่ากันเสมอ ฉันมองเข้าไป:set equalalwaysแต่ดูเหมือนจะไม่ทำสิ่งที่ฉันขอ
16 split  vimdiff 

1
ปฏิบัติต่อตัวอักษรสตริงเป็นภาษาอื่น
ฉันมีไฟล์จาวาสคริปต์จำนวนหนึ่งที่สตริงเป็นตัวอย่างของ HTML เพื่อแทรกลงในหน้าเว็บ เป็นกลุ่มทำการเน้นไวยากรณ์บน JavaScript และเน้นสตริงที่ยกมาเช่น ดูเหมือนว่านอกเหนือไปจากการเน้นในความเป็นจริง: ภายในเครื่องหมายคำพูด, กลุ่มที่ไม่ตรงกับ<แท็กที่เริ่มต้นด้วยแท็ก>ที่ลงท้ายด้วยเมื่อใช้%; ดูเหมือนว่าจะถือว่าสิ่งต่าง ๆ เช่นวงเล็บไม่อยู่ในตัวอักษรของสตริง มีวิธีการที่จะเป็นกลุ่มที่ตัวอักษรสตริงที่ควรจะถือว่าเป็นรหัสในภาษาที่แยกต่างหากหรือไม่?

3
ไม่มีการเน้นไวยากรณ์ใน tmux
ผมติดตั้งtmuxใน iTerm 2. (รูปร่าง 3.0.13) เมื่อผมดำเนินการvimในtmux, เน้นไวยากรณ์ลักษณะเช่นนี้ แต่ภายนอก tmux การเน้นไวยากรณ์ดูดี ฉัน$TERMภายในและภายนอก tmux xterm-256colorคือ ฉันยังเพิ่ม set -g default-terminal "screen-256color" ใน.tmux.confและเพิ่มสิ่งนี้ set t_Co=256 set t_AB=m set t_AF=m if &term =~ '256color' set t_ut= endif ใน.vimrc. ฉันลองtmux -2สั่งและอ่านคำถามเหล่านี้ เสีย colorcheme เป็นกลุ่มในโหมด tmux สีไม่ถูกต้องพร้อมเสียงเรียกเข้าใน iTerm2 โดยใช้ Solarized ปัญหานี้เป็นปัญหาของtmux, vimหรือการกำหนดค่าของฉันได้อย่างไร แก้ไข: ของฉัน.vimrcใน GitHub สรุปสาระสำคัญ https://gist.github.com/sohnryang/3c63397f332f2e30c7d7b2a83c3c9f52

3
ทำไมกลุ่มอนุญาตให้หารจำนวนเต็มด้วยศูนย์?
ฉันเพิ่งค้นพบว่าเป็นกลุ่มที่เห็นได้ชัดว่าช่วยให้การหารด้วยศูนย์: :let a=42/0 :echo a พิมพ์2147483647(ซึ่งเป็นค่าของa) เอกสารนี้มีอยู่ที่ใดที่หนึ่งและทำไมกลุ่มอนุญาตให้หารด้วยศูนย์?

3
วิธีการทำให้เป็นกลุ่มเพิ่มขึ้นบรรทัดใหม่โดยอัตโนมัติในตอนท้ายของไฟล์?
ปกติแล้วกลุ่มจะเขียน<EOL>สำหรับบรรทัดสุดท้ายเฉพาะเมื่อมีหนึ่งในไฟล์ต้นฉบับ วิธีที่จะทำให้เป็นกลุ่มที่จะเขียนบรรทัดใหม่ในตอนท้ายของไฟล์ตลอดเวลา (เมื่อไฟล์ที่ไม่ได้เป็นแบบไบนารีและไม่มีอยู่แล้ว) ฉันทดสอบeolตัวเลือกแล้ว แต่ใช้งานไม่ได้ตามที่คาดไว้ ดูเพิ่มเติม: รักษาจุดสิ้นสุดของบรรทัดที่หายไปที่ท้ายไฟล์ข้อความแต่ตรงกันข้าม และ: ทำไมไฟล์ควรลงท้ายด้วยการขึ้นบรรทัดใหม่


8
ปัญหาในการใช้ชุดรูปแบบสีใน NeoVim
ฉันไม่เข้าใจอย่างถ่องแท้ว่าชุดสีของฉันมีปฏิสัมพันธ์กับการtermตั้งค่าเป็นกลุ่มอย่างไรและนี่เป็นการขัดขวางความสามารถของฉันในการแสดงให้ถูกต้องใน neovim ในไฟล์. vimrc ของฉันพฤติกรรมที่ถูกต้องของชุดรูปแบบสีที่เป็นปัญหาต้องมีการตั้งค่า set term=xterm set t_Co=256 การข้ามการตั้งค่าเหล่านี้อย่างใดอย่างหนึ่งส่งผลให้การแสดงชุดรูปแบบสีไม่ถูกต้อง: แก้ไข ไม่ ถูกต้อง โครงการมีลักษณะดังนี้: set background=dark hi clear if exists("syntax_on") syntax reset endif let g:colors_name="impact3" if exists("g:impact_transbg") hi Normal ctermfg=255 ctermbg=none hi NonText ctermfg=DarkGray ctermbg=none hi Statement ctermfg=Blue ctermbg=none hi Comment ctermfg=DarkGray ctermbg=none cterm=bold term=bold hi Constant ctermfg=173 ctermbg=none hi …

1
เวทมนตร์ Regex ของ Vim เข้ากันได้กับคลาส Regex ที่รู้จักกันดีหรือไม่?
ไวยากรณ์นิพจน์ปกติของเครื่องมือ Unix จำนวนมากมักจะเป็น POSIX-codified Basic และ Extended Regular Expression (BRE และ ERE ตามลำดับ) และในการใช้งานที่ทันสมัยบางอย่างสไตล์ Perl (PCRE เป็นการนำไปใช้สิ่งนี้) มีการโต้ตอบแบบหนึ่งต่อหนึ่งระหว่างระดับเวทมนตร์ของ Vim และคลาสที่มีการกำหนดจากภายนอก แต่เป็นที่รู้จักกันดี? ดูเหมือนว่า\mเป็น BRE และ\vเป็น ERE ยกเว้น POSIX ไม่รวมการค้นหา หากมีการโต้ตอบดังกล่าวจะมีการกำหนดไว้ที่ไหน? มีเพียงหนึ่งเอ่ยถึงpattern.txtPOSIX หรือเราต้องใช้ "เวทมนต์" เพื่ออธิบายการแสดงออกปกติของกลุ่ม?

1
การเข้ารหัสไฟล์ด้วยปักเป้าปลอดภัยแค่ไหน?
ฉันรู้ว่าการใช้:set cryptmethod=zipจะไม่ปลอดภัย แต่วิธีการที่เชื่อถือได้ใช้:set cryptmethod=blowfish? วิกิพีเดียผมอ่านว่าตัวเลขปักเป้าเป็นเช่นนี้ควรจะเชื่อถือได้ แต่ไม่พูดอะไรเกี่ยวกับความปลอดภัยของกลุ่มของการดำเนินงานของมัน และสิ่งที่เกี่ยวกับ swapfiles, backupfiles, undofiles และวิธีอื่น ๆ ที่เป็นไปได้ในการหลีกเลี่ยงการเข้ารหัส blowfish? เป็นกลุ่มที่ปลอดภัยแค่ไหน?

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