Vi & Vim

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

4
ลบจากเคอร์เซอร์จนถึงการเกิดที่ n ของอักขระ x
ฉันรู้ว่าฉันสามารถลบได้จากเคอร์เซอร์จนถึงและรวมถึงการเกิดขึ้นครั้งแรกของตัวละครxด้วยd/x<CR>หรือv/x<CR>dถ้าฉันต้องการที่จะเห็นการเลือกก่อนแล้วจึงลบ ฉันจะลบออกจากตำแหน่งเคอร์เซอร์ปัจจุบันจนถึงเหตุการณ์ที่nของx ได้อย่างไร? เช่นถ้าเคอร์เซอร์อยู่หลังช่องว่างแรกใน yada yada yada yada yada yada x yada yada yada yada x yada yada yada yada x xx และผมพิมพ์คำสั่งที่จะลบได้ถึงสามxความต้องการผลที่ได้จะเป็น: ญาดา xx

1
ฉันจะจัดลำดับแท็บที่เปิดใหม่ได้อย่างไร
สมมติว่าฉันมีสี่เปิดไฟล์: file0.txt, file1.txt, และfile2.txt file3.txtฉันเปิดทั้งหมดในลำดับนั้นเป็นแท็บ ดังนั้นแท็บของฉันคือ: file0.txt file1.txt file2.txt file3.txt แล้วขอบอกว่าผมต้องการที่จะแทนการสั่งซื้อแท็บของฉันเพื่อให้file2.txtมาก่อนfile1.txt: file0.txt file2.txt file1.txt file3.txt ฉันจะทำอย่างไร มีคำสั่งเสียงเรียกเข้าเพื่อย้ายแท็บปัจจุบันไปทางซ้ายหรือขวาหรือจะเรียงลำดับแท็บที่เปิดอยู่ในปัจจุบันหรือไม่?

3
วิธีการเข้าสู่โหมดแทรกเมื่อเข้าสู่บานหน้าต่างเทอร์มินัล neovim
ฉันมีการแมปต่อไปนี้เพื่อให้ง่ายต่อการย้ายออกจากบานหน้าต่างเทอร์มินัลใน neovim: tnoremap <C-h> <C-\><C-n><C-w>h " Workaround since <C-h> isn't working in neovim right now tnoremap <C-w>h <C-\><C-n><C-w>h tnoremap <C-j> <C-\><C-n><C-w>j tnoremap <C-k> <C-\><C-n><C-w>k tnoremap <C-l> <C-\><C-n><C-w>l ปัญหาเดียวคือเมื่อฉันย้ายกลับไปที่บานหน้าต่างเทอร์มินัลฉันต้องกดiเพื่อกลับสู่โหมดแทรก ฉันต้องการให้มันอยู่ในโหมดแทรกเสมอเมื่อฉันย้ายไปที่บานหน้าต่าง neovim ที่กำลังเรียกใช้เทอร์มินัล อะไรคือวิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้?

3
ฉันจะล้างทะเบียน / ทะเบียนหลายรายการได้อย่างสมบูรณ์ได้อย่างไร
ผมค่อนข้างบ่อยใช้:registersคำสั่งเพื่อแสดงเนื้อหาของทั้งหมดลงทะเบียน (I ลืมสิ่งที่ฉันใส่ที่ตรงกับสิ่งที่บทบาทของ"*, "., "%ฯลฯ ) โดยเฉพาะอย่างยิ่งเพราะฉันตั้งค่า"ตัวเลือกในviminfoตัวเลือกและด้วยเหตุนี้การลงทะเบียนของฉันจะยังคงอยู่ระหว่างเซสชันเสียงเรียกเข้าของฉัน (ซึ่งโดยทั่วไปแล้วฉันต้องการในระยะสั้น) ตลอดเวลา:registersรายการจะยาวขึ้นเรื่อย ๆ และยุ่งยากมากขึ้น กับสิ่งที่เก่าจริงๆ จนถึงตอนนี้วิธีเดียวที่ฉันพบว่าการแก้ไขนี้คือการแก้ไขเนื้อหาลงทะเบียน 'เก่า' บางส่วนออกด้วยตนเอง~/.viminfoซึ่งฉันต้องทำด้วยvim -u NONEและจึงยุ่งยากเล็กน้อย มีวิธีที่สะอาดกว่าในการล้างการลงทะเบียนทั้งหมดหรือล้างการลงทะเบียนเฉพาะดังนั้นจึงไม่ปรากฏใน:registersรายการอีกต่อไปหรือไม่

1
ทำไมคำสั่งขีดล่าง _ จึงมีประโยชน์
ฉันสับสนเล็กน้อยว่าทำไมคำสั่งขีดล่าง_ซึ่งกระโดดไปที่จุดเริ่มต้นของบรรทัด (COUNT - 1) th ด้านล่างเคอร์เซอร์ได้รับรหัสของตัวเอง เมื่อผมจะใช้มากกว่านี้+หรือ^?

1
“ dap” ลบทุกอย่างหรือไม่
ฉันคุ้นเคยกับคำสั่ง "dd" และ "d {motion}" แต่ไม่พบ "dap" ใน help.txt ของ vim "dap" ทำอะไรในโหมดปกติและเพราะอะไร (อีกวิธีหนึ่งฉันจะค้นหาสิ่งนี้ได้ด้วยตัวเองอย่างไร)

2
ตัวเลือกทดแทนหลายรายการ?
โดยปกติcตัวเลือกทดแทนจะให้ฉันสองตัวเลือก: (y) es หรือ (n) o เป็นไปได้ไหมที่จะมีตัวเลือกใช่ที่มีให้เลือกหลายหมายเลข? ตัวอย่าง ไฟล์ person: Alice dog: Tobby person: Bob รูปแบบ 1 :%s/person:/woman:/c รูปแบบ 2 :%s/person:/man:/c รูปแบบที่ 1 และ 2 มีรูปแบบการค้นหาเดียวกัน แต่รูปแบบการแทนที่ที่แตกต่างกัน ฉันต้องการรวมไว้ในรูปแบบเดียวด้วยตัวเลือกในการกด (1) เพื่อทดแทน 1, (2) สำหรับการแทนที่ 2 หรือ (n) โดยไม่มีการแทนที่
15 substitute 

2
ฉันจะรันได้อย่างไร: แทนที่ส่วนใดส่วนหนึ่งของบรรทัดและไม่ได้ทั้งหมด
ฉันมีเส้นแบบนี้: function my_function(argument, another argument, but there are spaces) ฉันต้องการแทนที่อักขระช่องว่าง (ภายในชื่ออาร์กิวเมนต์) ด้วยเครื่องหมายขีดล่าง ฉันต้องการใช้: :s/\ /_/g แต่ฉันจะเลือกที่จะไม่ใช้กับทั้งบรรทัดได้อย่างไร แต่เริ่มจากพูดตำแหน่งเคอร์เซอร์ (หรือคำที่สาม)?

2
ฉันจะใช้ทางลัด Readline ในบรรทัดคำสั่ง vim ได้อย่างไร
เมื่อฉันแก้ไขคำสั่ง Vim ฉันต้องการใช้ทางลัดเดียวกับใน Bash และ REPL อื่น ๆ : M-bเพื่อย้อนกลับคำM-Backspaceเพื่อลบคำก่อนหน้านี้M-uเพื่อแปลงคำเป็นตัวพิมพ์ใหญ่C-kเพื่อตัดจนกว่าจะสิ้นสุด บรรทัด ฯลฯ ฉันสามารถกำหนดค่าคำสั่งบางอย่างใช้:cmapแต่ไม่ใช่ทั้งหมด มีปลั๊กอินหรือการตั้งค่าที่ให้สิ่งนี้หรือไม่? ฉันรู้ceditแต่ฉันพบว่ามันยุ่งยากเมื่อทุกอย่างที่ฉันต้องการคือการป้อนคำสั่งด่วน

2
ทำไม 'cw' และ `ce` ทำสิ่งเดียวกัน?
สิ่งนี้ทำให้ฉันเกี่ยวกับคำสั่งwและWการเคลื่อนไหวเสมอ - พวกเขาดูเหมือนจะทำงานแตกต่างกันเมื่อใช้กับcคำสั่ง hange มากกว่าที่พวกเขาทำเมื่อใช้คนเดียวหรือกับdคำสั่ง elete ตัวอย่างเช่นด้วยเคอร์เซอร์ที่ "q" ของข้อความนี้: The quick brown fox jumps over the lazy dog. พิมพ์dwผลลัพธ์ใน The brown fox jumps over the lazy dog. และพิมพ์deผลลัพธ์ใน The brown fox jumps over the lazy dog. (สังเกตช่องว่างสองช่องระหว่าง "The" และ "brown") yank คำสั่งยังถือว่าwและeแตกต่างที่สามารถแสดงให้เห็นโดยการเปรียบเทียบyeP: The quickquick brown fox jumps over the lazy …

1
วิธีการรักษาขีดล่างเหมือนที่ว่าง?
เป็นไปได้หรือไม่ที่กลุ่มจะจัดการกับขีดล่างเช่นช่องว่างหรือไฮเปอร์ดังนั้นเมื่อฉันใช้ลำดับdwมันจะไม่ลบทั้งประโยคsome_long_text_with_underscoresเมื่อเคอร์เซอร์อยู่ที่จุดเริ่มต้น?

2
ค้นหาบรรทัดที่มีรูปแบบ แต่ไม่มีรูปแบบที่สอง
ฉันต้องการค้นหาบรรทัดที่มีคำบางคำ แต่ไม่มีคำที่สอง ตัวอย่างเช่นค้นหาบรรทัดที่มีคำว่า "นี่" แต่ไม่ใช่คำว่า "สีแดง" ดังนั้นสำหรับไฟล์ที่มีบรรทัดเหล่านี้ This is a blue coat This is a red coat This is a purple coat That is a coat การค้นหาจะค้นหาบรรทัดแรกและบรรทัดที่สามเท่านั้น ขอบคุณสำหรับคำแนะนำใด ๆ !
15 search 

2
Vimscript มีชื่อทางการหรือไม่?
ชื่อภาษาบางครั้งเรียกว่า Vimscript เป็นหัวข้อถกเถียง บางแห่งใช้ Viml (หรือเป็น VimL?), Vimscript อื่น ๆ มันมีชื่ออย่างเป็นทางการและถ้ามันเป็นสิ่งที่มันและตั้งแต่เมื่อมันเป็นทางการ? คำถามเกี่ยวกับ VimL กับ Vimscript (อายุประมาณ 5 ปี) โพสต์ล่าสุดที่กล่าวถึงว่ามีชื่อเป็นทางการ การวิ่งของ:helpgrep \cviml\>พาเราไปที่syntax.txt: g:vimsyn_noerror Not all error highlighting that syntax/vim.vim does may be correct; VimL is a difficult language to highlight correctly. และversion7.txt: Added special python-vars objects also available for python-buffer and …

2
มีส่วนร่วมในการเป็นกลุ่มได้อย่างไร
ฉันใช้ Vim มา 4 ปีแล้ว ฉันรอคอยที่จะมีส่วนร่วมในโครงการโอเพนซอร์สเป็นกลุ่ม ฉันต้องการเคล็ดลับเล็กน้อยเกี่ยวกับสถานที่ที่จะเริ่มต้นและผู้ที่จะติดต่อเพื่อช่วยเหลือ Vim ความช่วยเหลือจากผู้ที่สนับสนุน Vim แล้วจะช่วยได้มาก :) ขอบคุณล่วงหน้า. ป.ล. - ฉันไม่แน่ใจว่าฉันสามารถโพสต์ที่นี่ได้หรือไม่ แต่ในที่สุดก็ตัดสินใจโพสต์ที่นี่เพราะนี่จะเป็นสถานที่ที่มีผู้ที่ชื่นชอบ Vim มากที่สุดที่จะพูดคุยด้วย

4
ผสานบล็อกด้วยเส้นแทรก
มีวิธีเฉพาะในการรวมสองบล็อกข้อความโดย interleaving บรรทัดเช่นผ่านจากนี้ a1 a2 a3 a4 b1 b2 b3 b4 เพื่อที่: a1 b1 a2 b2 a3 b3 a4 b4 ในคำสั่งไม่กี่? แก้ไข : ฉันชอบโซลูชันของ Sato Katsuraนี่คือวิธีที่ฉันใช้งาน: function! Interleave() " retrieve last selected area position and size let start = line(".") execute "normal! gvo\<esc>" let end = line(".") let [start, end] …

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