Vi & Vim

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


1
ลบคำจากพจนานุกรม
ฉันกำลังใช้gvim: $ gvim --version VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Feb 16 2017 06:36:51) MacOS X (unix) version Included patches: 1-329 Compiled by Homebrew ฉันกำลังแก้ไขข้อความบรรทัดต่อไปนี้: enable mouse scrolling, pane selection, pan reiszing and so on. ฉันสังเกตว่า "reiszing" ถูกสะกดผิดดังนั้นฉันจึงใช้คำสั่งต่อไปนี้เพื่อเปิดการตรวจการสะกด: setlocal spell spelllang=en_us "reiszing" ถูกไฮไลต์ตามที่คาดไว้ แต่หลังจากนั้นฉันก็ใช้zgคำสั่งซึ่งเพิ่มคำลงในพจนานุกรมของฉันโดยไม่ตั้งใจ ฉันเดินผ่าน/usr/share/dict/wordsแต่ไม่พบว่า "กลับมา" ฉันจะลบคำนี้ออกจากพจนานุกรมได้อย่างไร …


1
ฉันจะแก้ไขไฮไลต์ไวยากรณ์“ ที่หายไป” สำหรับคำหลัก Python เช่น“ ตนเอง” ได้อย่างไร
ฉันพยายามแก้ไขไฮไลต์ไวยากรณ์สำหรับหลาม สีของฉันแตกต่างจากภาพในหน้าจอที่ "ควร" มีลักษณะเหมือนในโทนสีที่ต่างกัน และคุณสามารถเห็นความแตกต่างในการเปรียบเทียบ. rb (ซึ่งแสดงอย่างถูกต้อง) กับ. py ซึ่งดูเหมือนว่าปิดอยู่: ตัวอย่างเช่นสังเกตว่าselfไม่มีการเน้นสี (นี่คือใน base16 แต่การเปรียบเทียบจะคล้ายกันในโทนสีอื่น ๆ ) โดยทั่วไปดูเหมือนว่าการเน้นไวยากรณ์วัตถุผิด บางสิ่งที่ฉันได้ลอง: มองไปที่สคริปต์ไวยากรณ์เป็นกลุ่มโหลด; ความแตกต่างเพียงอย่างเดียวระหว่าง. py และ. rb ในตัวอย่างด้านล่างคือแน่นอนว่า ruby ​​ได้รับการเยื้อง / ruby.vim และ syntax / ruby.vim ขณะที่ python รับการเยื้อง / python.vim และ syntax / python.vim นี่คือไฟล์ที่มาพร้อมกับ homebrew vim การโหลดไฟล์เดียวกันใน macvim แทน terminal (iterm2) vim; …

3
ข้ามไปยังคำที่ฉันเพิ่งเปลี่ยนไป
หากฉันมีดังต่อไปนี้: function foo(bar) { return bar + 1; } และฉันจะใช้cwในการเปลี่ยนแปลงครั้งแรกbarที่จะbazฉันจะข้ามไปจับคู่ต่อไปbarเพื่อที่ฉันสามารถใช้.เพื่อให้การเปลี่ยนแปลงเดียวกันได้หรือไม่ ฉันไม่สามารถใช้*เพราะการค้นหาคำปัจจุบันภายใต้เคอร์เซอร์และฉันก็โง่ไม่ได้ค้นหาbarเป็นครั้งแรกดังนั้นnจะไม่ทำงาน มีวิธีง่ายๆในการค้นหาคำที่เกิดขึ้นต่อไปเหมือนเดิมก่อนที่จะเปลี่ยนหรือไม่ ฉันไม่ต้องการค้นหาและแทนที่เนื่องจากอาจมีเหตุการณ์อื่นเกิดขึ้นbarในไฟล์ของฉันที่ฉันไม่ต้องการเปลี่ยนหรือเพราะมีเพียงสองกรณีbarเท่านั้นและฉันลืมไป:%s/bar/baz/ก่อนที่จะเริ่มและนั่นก็เกินไป ความพยายามอย่างมากในการเปลี่ยนอินสแตนซ์ที่เหลืออยู่เท่านั้น
12 search 

3
แทนด้วย vimscript บริสุทธิ์ (ไม่มี `: s`)
ฉันมีดังต่อไปนี้ใน vimrc ของฉัน: func! AddSpaceBeforeEqual() s/\([a-z)_0-9"'\[\]]\)=/\1 =/ge endfunc ฉันใช้vintเพื่อกำจัด vimrc ของฉันและได้รับคำเตือนต่อไปนี้: ProhibitCommandWithUnintendedSideEffect หลีกเลี่ยงคำสั่งที่มีผลข้างเคียงที่ไม่ได้ตั้งใจ หลีกเลี่ยงการใช้: [ubstitute] ในขณะที่เลื่อนเคอร์เซอร์และพิมพ์ข้อความผิดพลาด ชอบฟังก์ชั่น (เช่นการค้นหา ()) ที่เหมาะสมกับสคริปต์ สำหรับคำสั่ง vim จำนวนมากฟังก์ชั่นมีอยู่ที่ทำสิ่งเดียวกันโดยมีผลข้างเคียงน้อย โปรดดู: ฟังก์ชั่นช่วยเหลือ () สำหรับรายการฟังก์ชั่นในตัว คู่มือสไตล์ Google Vimscript อย่างไรก็ตามฉันไม่คิดว่าพวกเขาเป็นวิธีการทดแทนโดยไม่ต้องใช้:sคำสั่ง ตัวอย่างเช่นsearch()ฟังก์ชันให้บรรทัดที่จับคู่รูปแบบ แต่ไม่มีวิธีการทดแทน substitute()ฟังก์ชั่นดำเนินการในสตริงและไม่ทดแทนในไฟล์ทั้งหมด ฉันควรใช้วิธีการทดแทนด้วยตัวเองหรือพวกเขาเป็นวิธีที่ชาญฉลาดในการเขียนฟังก์ชั่นของฉันใหม่?

1
ความผิดพลาดของการสะกดมีสีที่แปลก
ฉันใช้ตัวตรวจสอบการสะกดคำในกลุ่มและฉันพบคุณลักษณะหนึ่งที่น่ารำคาญมาก: มีการเน้นข้อผิดพลาดด้วยสีแปลก ๆ ซึ่งไม่มีที่ไหนเลยที่จะพบได้ในการตั้งค่าเทอร์มินัลของ GNOME: ฉันต้องการเปลี่ยนสีไฮไลต์เป็นอย่างอื่นดังนั้นจึงไม่ปิดบังworddโดยไม่เปลี่ยนสีแบบอักษรสากลของฉัน ฉันจะกำหนดค่าสิ่งนี้ได้อย่างไร

1
มีตัวเลือกอะไรบ้างในการเข้าสู่โหมดแทรก
ผมใช้ในการเข้าสู่โหมดแทรกโดยaไม่เคยรู้ว่ามีระบบที่เป็นไปได้ที่แทรกโหมดเริ่มต้น บางครั้งฉันก็รำคาญที่aจะวางเคอร์เซอร์หลังตัวอักษรตัวแรกของบรรทัด แต่สิ่งนี้คือ: มันเข้าสู่โหมดแทรกหลังตำแหน่งเคอร์เซอร์ปัจจุบัน จากนั้นผมก็รู้ว่าผมจะเข้าไปแทรกโหมดที่ท้ายบรรทัดโดยใช้หรือด้านล่างบรรทัดปัจจุบันใช้Ao วิธีในโหมดปกติเพื่อเข้าสู่โหมดแทรกมีความแตกต่างกันอย่างไร

1
ตำแหน่งมือสำหรับการนำทางเป็นกลุ่ม
ฉันเป็นผู้ใช้ที่เป็นกลุ่มใหม่และฉันต้องการถามคำถามพื้นฐานนี้เพื่อให้แน่ใจว่าฉันเริ่มเรียนรู้วิธีที่ถูกต้องและไม่พัฒนานิสัยที่ไม่ดี เมื่อคุณใช้ Vim คุณวางตำแหน่งมือขวาของคุณอย่างไร? ฉันพบว่ามันเป็นธรรมชาติมากขึ้นที่จะเริ่มต้นด้วยนิ้วของฉันบนjkl;แป้น แต่จากนั้นฉันก็พบว่าตัวเองขาดhกุญแจทุกครั้งเมื่อฉันนำทาง ตรงกันข้ามถ้าผมวางตำแหน่งนิ้วมือของฉันบนhjklแล้วผมก็พบว่าตัวเอง mistyping คำพูดเช่นนี้ไม่ได้เป็นตำแหน่งที่ผมได้รับการฝึกฝนเพื่อให้มือของฉันบนแป้นพิมพ์และผมพบว่าการสลับjkปุ่มด้วยนิ้วกลางและสามของฉันจะเป็นที่น่าอึดอัดใจ

1
กำลังลบช่วงของ n บรรทัดก่อนและหลังบรรทัดที่ตรงกันหรือไม่
ฉันมีไฟล์การกำหนดค่าซ้ำและฉันต้องการจับคู่ regex และลบช่วงของเส้นก่อนและหลังการแข่งขัน ฉันต้องการลบการจับคู่ในคำสั่งเดียว ฉันสามารถใช้... :g/match/-1d ... หลายครั้งที่จะลบมากกว่าหนึ่งบรรทัดจากก่อนการแข่งขัน ... ... และรวมเข้ากับการโทรสองสามครั้งเพื่อ ... :g/match/+1d ... เพื่อลบมากกว่าหนึ่งบรรทัดหลังการแข่งขัน ... แต่มีวิธีใดในการลบช่วงของเส้นก่อนหลังและรวมการจับคู่กับคำสั่งเดียว?

1
ข้ามไปยังออฟเซ็ตไบต์และแสดงตำแหน่งเป็นออฟเซ็ตไบต์
ฉันสามารถย้ายเคอร์เซอร์ไปที่n THไบต์ในบัฟเฟอร์? ฉันจะแสดงตำแหน่งเคอร์เซอร์ปัจจุบันในไม้บรรทัดในแง่ของการชดเชยไบต์แทนที่จะเป็นเส้นและคอลัมน์ได้อย่างไร (คำถามติดตามผล: สามารถแสดงได้ทั้งทศนิยมและฐานสิบหก?)

2
เมื่อสร้าง colorcheme ฉลากสำหรับพื้นที่ ~ ของหน้าจอด้านล่าง EOF คืออะไร
ฉันได้พบชุดสีบางส่วนที่ฉันชอบ แต่บางชุดมีคุณสมบัติที่บรรทัดด้านล่างเนื้อหาของไฟล์บนจอแสดงผล - ~พื้นที่ - มีสีพื้นหลังที่แตกต่างกันตามที่แสดง .. ฉันต้องการให้เป็นพื้นหลังเดียวกัน สีเป็นข้อความปกติ เมื่อแก้ไขชุดสีฉันจะค้นหาคำหลักใดในการแก้ไขปัญหานี้ ฉันใช้ MacVim แต่ฉันคิดว่านี่เป็นคำถามสากล


3
วิธีที่มีประสิทธิภาพในการค้นหาและเปิดไฟล์อย่างลึกซึ้งในแผนผังโครงการหรือไม่
หากไม่มีปลั๊กอินเช่นctrlpและวิธีNERDTreeใดจะเป็นวิธีที่มีประสิทธิภาพมากที่สุดในการค้นหาและเปิดไฟล์ในแผนผังโครงการ การตั้งค่าpathto **/*ส่งผลให้ไฟล์ที่ไม่มีประโยชน์ใน.gitและไดเรกทอรีที่ซ่อนอยู่อื่น ๆ ดังนั้นที่ดูเหมือนจะออกจากคำถาม มีวิธีการตั้งค่าเส้นทางในลักษณะสมาร์ทเพื่อให้มีเพียงไฟล์ในgit ls-filesหรืออะไร?

3
เสียงเรียกเข้า: จับสัญญาณร้ายแรงถึง SEGV ได้ไหม
ฉันพบปัญหานี้เมื่อเริ่มใช้ Vim ด้วย-pตัวเลือก สมมติว่าฉันเริ่มต้นด้วย vim -p first.txt second.txt แล้วหลังจากที่การแก้ไขfirst.txtผมย้ายไปใช้second.txt gtฉันกดปุ่มggและGอีกครั้ง สิ่งนี้ทำให้เกิดข้อผิดพลาด Vim: Caught deadly signal SEGV จากจุดนี้เป็นกลุ่มไม่ตอบสนองต่อสัญญาณใด ๆ Ctrl Dรวมทั้ง ฉันสามารถปิดเซสชั่นนี้โดยการฆ่า terminal ปัญหานี้เกิดขึ้นเฉพาะเมื่อฉันเรียกใช้ Vim พร้อม-pตัวเลือก ถ้าฉันเปิดfirst.txtก่อนแล้วจึงใช้:tabeเพื่อเปิดsecond.txtปัญหานี้จะไม่เกิดขึ้น ความคิดใด ๆ ที่ทำให้เกิดเหตุการณ์เช่นนี้? ผลลัพธ์ของvim --version: VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan 2 2014 19:40:46) Included patches: 1-52 Modified by pkg-vim-maintainers@lists.alioth.debian.org …
12 crash 

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