Vi & Vim

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

1
เหตุใด Line Feed จึงถูกแปลงเป็นอักขระ Null ภายในรีจิสเตอร์การค้นหาและเป็น Carriage Return บนบรรทัดคำสั่ง
ถ้าฉันมีข้อความต่อไปนี้: foo bar ฉันเลือกและคัดลอก ตอนนี้ข้อความถูกเก็บไว้ในการลงทะเบียนที่ไม่มีชื่อ"และนี่คือเนื้อหา (ผลลัพธ์ของ:reg "): "" foo^Jbar^J ตามแผนภูมินี้ดูเหมือนว่า^Jเครื่องหมายรูปหมวกสำหรับตัวดึงข้อมูลบรรทัด หากฉันต้องการทำซ้ำทะเบียนที่ไม่มีชื่อในการaลงทะเบียนโดยพิมพ์: :let @a = @" นี่คือเนื้อหา (output of :reg a): "a foo^Jbar^J มันไม่เปลี่ยนแปลง ถ้าตอนนี้ฉันทำซ้ำในทะเบียนการค้นหาโดยพิมพ์:let @/ = @"นี่คือเนื้อหา (ผลลัพธ์ของ:reg /): "/ foo^@bar^@ ตามแผนภูมิก่อนหน้านี้ดูเหมือนว่า^@เป็นเครื่องหมายรูปหมวกสำหรับอักขระ Null เหตุใด Line Feed จึงถูกแปลงเป็นอักขระ Null ภายในรีจิสเตอร์การค้นหาโดยอัตโนมัติ (แต่ไม่ใช่aรีจิสเตอร์) ถ้าฉันแทรกการลงทะเบียนที่ไม่มีชื่อในบรรทัดคำสั่ง (หรือในการค้นหาหลังจาก/) โดยพิมพ์:<C-R>"นี่คือสิ่งที่ถูกแทรก: :foo^Mbar^M อีกครั้งตามแผนภูมิล่าสุด^Mดูเหมือนจะเป็นเครื่องหมายรูปหมวกสำหรับ Carriage Return เหตุใด Line Feed …

2
แสดง CR และ LF แทน“ EOL” ใน ': set list'
แทนที่จะเลือกหนึ่งอักขระที่จะแสดงเป็นอักขระ EOL ฉันต้องการให้แสดงทั้ง CR และ LF แยกต่างหากโดยไม่คำนึงว่าไฟล์เป็น unix หรือ dos เป็นไปได้ไหม
12 vimrc 

1
ความสมบูรณ์แบบไดนามิก
ฉันพยายามปรับปรุงฟังก์ชั่นการเติมเต็มให้สมบูรณ์ ฉันต้องการอัปเดตตัวเลือกที่ปรากฏในเมนูป๊อปอัปขณะที่พิมพ์อักขระใหม่ ฟังก์ชั่นความสมบูรณ์ของฉันคือ function! lh#icomplete#ecm(findstart, base) abort if a:findstart let l = getline('.') let startcol = match(l[0:col('.')-1], '\v\S+$') if startcol == -1 let startcol = col('.')-1 endif " let g:debug+= ["findstart(".a:base.") -> ".(startcol)] return startcol else " let g:debug += ["matching(".a:base.")"] let words = ['un', 'deux', 'trois', 'trente-deux', 'unité'] call …

3
การทำแผนที่ด้วยการเคลื่อนไหว
ฉันพยายามที่จะเข้าใจว่าฉันจะใช้โอเปอเรเตอร์กับการเคลื่อนไหวที่ตามมาภายในแผนที่ได้อย่างไร ตัวอย่างเช่น: nmap /c c{here we pending for a motion}/<C-r>"<CR> แผนที่ควรทำดังนี้: เปิดใช้งานcโอเปอเรเตอร์และฟังการเคลื่อนไหวครั้งต่อไป เช่นฉันสามารถพิมพ์ที่นี่t,เพื่อเปลี่ยนแปลงทุกอย่างก่อนเครื่องหมายจุลภาคถัดไป ไปที่โหมดแทรกเพื่อลบทุกอย่างระหว่างเคอร์เซอร์และเครื่องหมายจุลภาค; ข้อความที่ถูกลบจะถูกค้นหาโดยอัตโนมัติในรูปแบบ ดังนั้นเพื่อให้ง่ายหลังจากลบข้อความการเคลื่อนไหวฉันออกจากโหมดแทรกพร้อมการเน้นข้อความที่ถูกลบ ฉันจะขอบคุณมากถ้ามีคนช่วยฉันไขปริศนาคดีนี้ UPDATE คำตอบคือสิ่งที่ฉันต้องการ แต่! เมื่อฉันกดพิมพ์สิ่งที่แทนคำนั้นกด/cw <Esc>หลังจากที่ฉันคาดว่าจะทำเช่นเดียวกันกับเหตุการณ์ที่เกิดขึ้นต่อไป แต่หลังจากนำเสนอn(ไปที่เหตุการณ์ถัดไป) และ.(ทำซ้ำคำสั่งสุดท้าย) เพียงแค่เติมข้อความที่พิมพ์ล่าสุดแทนการแทนที่ เป้าหมายหลักของการทำแผนที่คือใช้กับn/Nและ.เพื่อทำซ้ำ ฉันพลาดอะไรไปหรือเปล่า

2
ลบจากเคอร์เซอร์จนถึงอักขระแรก x (ขยายหลายบรรทัด)
ฉันรู้ว่าฉันสามารถลบออกจากเคอร์เซอร์จนถึงและรวมถึงการเกิดขึ้นครั้งแรกของตัวอักษรxdfxกับ ใช้ได้กับหนึ่งบรรทัดเท่านั้น ฉันจะลบออกจากตำแหน่งเคอร์เซอร์ปัจจุบันจนถึงการเกิดขึ้นครั้งแรกของxเมื่อxไม่อยู่ในบรรทัดเดียวกันได้อย่างไร เช่นหากเคอร์เซอร์อยู่หลังช่องว่างแรกใน yada yada yada yada yada yada x และฉันพิมพ์dfxผลลัพธ์จะต้อง: ญาดา

3
ไฮไลต์เลิกทำในกลุ่ม
ฉันกำลังพยายามยกเลิกการเน้นใน Vim เช่นการกำหนดค่าเริ่มต้นของ spacemacs บางครั้งเมื่อฉันต้องการเลิกทำอย่างรวดเร็วฉันไม่สามารถรับรู้สิ่งที่เปลี่ยนแปลงไปได้เพราะมันเกิดขึ้นทันที ดังนั้นฉันจึงพยายามที่จะมีสิ่งนี้เมื่อกดยกเลิก: ใครมีความคิดวิธีการทำเช่นนี้ในกลุ่ม? (ฉันมีปลั๊กอิน Gundo อยู่แล้วฉันต้องการทำให้การยกเลิกเริ่มต้นราบรื่นยิ่งขึ้น) แก้ไข : ปลั๊กอินundotreeใช้งานได้ ( Gundoไม่เน้นการเปลี่ยนแปลง) เพียงใช้UndotreeToggleคำสั่งและการเปลี่ยนแปลงในอนาคตทั้งหมดในไฟล์จะถูกเน้น

2
อะไรคือความแตกต่างระหว่าง j, CTRL-J, <NL> และ CTRL-N ในโหมดปกติ?
ฉันเห็นบางแห่งบนเว็บที่มีคนใช้Ctrl-Jและฉันไม่รู้ว่าการทำแผนที่นี้ฉันค้นหาเอกสารที่เกี่ยวข้องและพบสิ่งต่อไปนี้: j or &lt;Down&gt; or CTRL-J or &lt;NL&gt; or CTRL-N [count] lines downward linewise. ซึ่งทำให้ฉันมีคำถามหลายข้อ: คืออะไร&lt;NL&gt; : ฉันจะเห็นว่ามันเป็นเทียบเท่าของ&lt;CR&gt;ตั้งแต่การกดEnterจะลงไปหนึ่งบรรทัดในโหมดปกติโดยค่าเริ่มต้น แต่ทำไมมันเป็น&lt;NL&gt;ที่นี่และไม่&lt;CR&gt;? ความแตกต่างระหว่างการแมปเหล่านี้ : ตัวเลือกทั้งหมด 5 ตัวเลือกเหล่านี้มีหนึ่งบรรทัดในลักษณะเดียวกันหรือไม่? จากการทดสอบของฉันฉันจะตอบว่าใช่ แต่นั่นจะนำไปสู่คำถามต่อไปของฉัน เหตุใดจึงมีการแมป 5 รายการเพื่อทำสิ่งเดียวกัน : ฉันเข้าใจjและ&lt;down&gt;เก็บไว้สำหรับผู้ใช้ที่ไม่คุ้นเคยกับการจับคู่การแมป แต่ทำไมการแมปอื่น ๆ จึงมีอยู่ เมื่อใดจึงจะน่าสนใจที่จะใช้มากกว่าอีกคำถาม: นั่นคือความต่อเนื่องของคำถามก่อนหน้านี้: หากมีความเป็นไปได้มากมายฉันคิดว่าพวกเขามีข้อได้เปรียบที่แตกต่างกันหรือดีกว่าที่จะใช้ในกรณีการใช้งานเฉพาะ กรณีการใช้งานเหล่านั้นคืออะไร? ผมพบความซ้ำซ้อนของคำสั่งเหล่านี้แม้จะแปลกเมื่อฉันมองไปที่อื่น ๆ:h k: มีเพียง 3 วิธีที่จะขึ้นไป: k, และ&lt;UP&gt; ctrl-pดังนั้นคำถามโบนัสคือ: ทำไมมี 5 วิธีที่จะลงไปและเพียง …

1
วิธีการใช้ข้อมูลที่สำคัญใน. vimrc
ฉันต้องการให้. vimrc ของฉันซิงค์ผ่าน github ดังนั้นจึงต้องเป็นไฟล์สาธารณะ แต่ในเวลาเดียวกันฉันต้องใส่ข้อมูลที่ละเอียดอ่อนบางอย่าง (เช่นรหัสผ่าน db / โฮสต์สำหรับ dbext.vim) ไว้ในนั้นโดยไม่ให้พวกเขาออกไป คนอื่น ๆ วิธีที่ดีที่สุดคืออะไรและทำอย่างไร?
12 vimrc  security 

2
ฉันจะค้นหาสัญลักษณ์ LaTeX ใน Vim ได้อย่างไร
ฉันสามารถรวมบางส่วนของการเติมเต็มสัญลักษณ์ให้กับ Vim ได้หรือไม่? บรรณาธิการเท็กซ์เฉพาะเช่น TeXMaker ให้รายชื่อของสัญลักษณ์เสร็จ (เช่น\alแสดงรายการด้วย\alpha, \laการแสดง\lambdaและ\langle) โปรดทราบว่าเท็กซ์มีจำนวนค่อนข้างใหญ่ของสัญลักษณ์เพื่อให้ข้อเสนอแนะที่เกี่ยวข้องกับการทำแผนที่คู่มือ\alการ\alphaจะไร้ประโยชน์ ปลั๊กอินที่เกี่ยวข้องฉันมี: SuperTabพร้อมlet g:SuperTabDefaultCompletionType="context"และ set omnifunc=syntaxcomplete#Complete น้ำยาง-Box ถ้าเป็นเรื่องสำคัญฉันใช้ XeLaTeX เพื่อรวบรวม ที่เกี่ยวข้อง: จะค้นหาสัญลักษณ์หรือระบุสัญลักษณ์ทางคณิตศาสตร์หรือตัวละครได้อย่างไร?

1
มีอะไรเลวร้ายเกิดขึ้นได้ถ้าฉันใช้: bwipeout?
ฉันเพิ่งค้นพบ:bwipeoutคำสั่งซึ่ง:helpรัฐ: ชอบ:bdeleteแต่จริงๆลบบัฟเฟอร์ ทุกอย่างที่เกี่ยวข้องกับบัฟเฟอร์หายไป เครื่องหมายทั้งหมดในบัฟเฟอร์นี้ไม่ถูกต้องการตั้งค่าตัวเลือกจะสูญหาย ฯลฯ อย่าใช้สิ่งนี้จนกว่าคุณจะรู้ว่าคุณกำลังทำอะไรอยู่ นอกเหนือจากที่เห็นได้ชัดฉันไม่แน่ใจว่าข้อเสียของการใช้คำสั่งนี้คืออะไร การตั้งค่าตัวเลือกของฉันจะถูกรีเซ็ตเป็นค่าเดิมเกือบทุกครั้งเมื่อฉันเปิดไฟล์ที่เป็นปัญหาและการสูญเสียเครื่องหมายของฉันดูเหมือนจะไม่รับประกันคำเตือนที่เป็นลางไม่ดี: "อย่าใช้สิ่งนี้จนกว่าคุณจะรู้ว่าคุณกำลังทำอะไรอยู่" มีอะไรรวมอยู่ใน "ฯลฯ " และสิ่งที่จะเกิดขึ้นกับสิ่งที่ฉันไม่ได้มองข้าม?
12 buffers 

1
ป้องกัน Vim จากการบันทึกเหตุการณ์สำหรับไฟล์บางชนิด
หากต้องการเพิ่มคำถามสแต็คโฟลว์โฟล์วสิ่งใดที่ควรใส่.vimrcเพื่อให้แน่ใจว่า 'การแก้ไขส่วนตัว' ของนามสกุลไฟล์บางไฟล์ (เช่น.gpgไฟล์) ไม่ควรบันทึกข้อมูลเกี่ยวกับงานที่ทำเสร็จรวมถึงการลงทะเบียนประวัติการค้นหาประวัติคำสั่งการดูการสลับ ฯลฯ สำหรับgpgไฟล์ผู้ใช้สามารถใช้vim pluginนี้ได้ แต่นอกเหนือจากการแก้ไขปลั๊กอิน มีการขยายแนวคิดที่กล่าวถึงเหล่านี้ไปยังประเภทไฟล์ใด ๆ เราอาจใช้ประโยชน์จากคำสั่งต่อไปนี้ if &lt;ft in privacy_ext_list&gt; set noswapfile set noundofile set viminfo= endif แต่นอกจากคำแถลงเงื่อนไขที่เหมาะสมแล้วมีอะไรหายไปบ้าง นอกจากนี้ Vimscript ยังมีวิธีสร้างอาเรย์ของไฟล์นามสกุลแล้วประเมินว่าไฟล์ประเภทปัจจุบันนั้นอยู่ในอาเรย์หรือไม่?

3
ฉันจะทำให้ windows ของฉันกลับมาเป็นรูปแบบกริดได้อย่างไร
ถ้าฉันมี windows จัดเป็นสี่ quadrants จากลำดับของคำสั่งต่อไปนี้: :tabnew :vsplit :split &lt;C-W&gt;l :split จากนั้นการป้อนคำสั่งเช่น&lt;C-W&gt;Jจะทำให้สิ่งเหล่านี้ไม่เป็นรูปสี่เหลี่ยมอีกต่อไป ในกรณีนี้มันจะบังคับให้หนึ่งหน้าต่างลอยที่ด้านล่าง ฉันจะทำในสิ่งที่ตรงกันข้ามได้หรือไม่ - นั่นคือบังคับให้หน้าต่างกลับสู่รูปแบบสี่เหลี่ยม? ฉันอ่านแล้ว:help window-movingแต่ไม่เห็นสิ่งใดมีประโยชน์

3
UI เพื่อปรับ vimrc โดยไม่ต้องเขียนตั้งแต่เริ่มต้น
Vim สามารถปรับแต่งได้อย่างไร้ขีด จำกัด อย่างไรก็ตามการสร้าง vimrc เป็นงานที่น่ากังวลสำหรับผู้เริ่มใช้และผู้ใช้ระดับกลาง โดยทั่วไปคุณคาดว่าจะพัฒนาจากกระดานชนวนว่างเปล่าโดยการอ่านเอกสารและรับเคล็ดลับจากผู้ใช้คนอื่น ๆ มีเมนูการตั้งค่าที่ใช้งานง่ายเพื่อช่วยผู้เริ่มต้นสร้างและแก้ไข vimrc หรือไม่? อาจเป็นเครื่องมือที่ทำงานบนเว็บหรือบางอย่างคล้ายกับกล่องโต้ตอบตัวเลือกในโปรแกรมประมวลผลคำ?
12 vimrc  options 

4
ฉันจะยกเลิกการเปลี่ยนแปลงที่ฉันอาจทำหรือไม่ได้ทำอย่างปลอดภัยได้อย่างไร
บ่อยครั้งที่ฉันทำผิดพลาดในการพิมพ์โดยเน้นหน้าต่างผิด (และทำเช่นนั้นสองสามครั้งด้วยตัวตรวจสอบสิทธิ์ USB) ในโปรแกรมที่เปิดใช้งานปุ่มลัดจำนวนมาก (Gmail, VLC, Vim) สิ่งนี้มักจะเกิดขึ้นโดยไม่ได้ตั้งใจจากการแก้ไขที่ไม่ต้องการ บางครั้งฉันสามารถติดตามขั้นตอนของฉันและจดจำสิ่งที่ฉันพิมพ์เพื่อซ่อมแซมการเปลี่ยนแปลงหรือคืนค่าการตั้งค่าใด ๆ ที่ฉัน tweaked ถ้าฉันจับตัวเองก่อน น่าเสียดายที่มันไม่ได้เป็นอย่างนั้นเสมอไป ในกลุ่มฉันอาจมีบางสิ่งบางอย่างที่ไร้เดียงสาและชัดเจนเหมือนกับการแก้ไขบรรทัดข้อความที่ยกเลิกได้อย่างง่ายดาย หรือฉันอาจแก้ไขบางอย่างโดยไม่รู้ตัวซึ่งไม่สามารถระบุได้ง่าย หากฉันพิมพ์ลำดับของคำสั่งที่ไม่ต้องการใน Vim โดยไม่ตั้งใจฉันจะตรวจสอบและเลิกทำการแก้ไขหรือเปลี่ยนแปลงการตั้งค่าได้อย่างไร
12 undo-redo 

4
ฉันจะแก้ไขไฟล์ crontab ด้วย Vim ได้อย่างไร (ฉันได้รับข้อผิดพลาด: 'ต้องแก้ไขไฟล์ temp')
ฉันจะแก้ไขcrontabไฟล์ใน FreeBSD ได้อย่างไร $ crontab -e # ... I do my thing in vim &amp; :wq "crontab.9ZcXiFaawt" 6L, 203C written crontab: temp file must be edited in place Exit 1 ใช้EDITOR=nviงานได้ดี ... Linux ดูเหมือนว่าจะทำงานได้ดี ...
12 save  unix 

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