Vi & Vim

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

1
ฉันจะเรียกใช้ autocmd ได้อย่างไรเมื่อเริ่ม Vim โดยไม่มีไฟล์, ไฟล์ที่ไม่มีอยู่หรือไฟล์เปล่า (แต่ไม่ใช่เมื่อเริ่มต้นด้วยไฟล์ที่มีอยู่)
ฉันต้องการเรียกใช้ autocmd ในสถานการณ์ต่อไปนี้เมื่อฉันเริ่ม Vim: โดยไม่ได้ระบุชื่อไฟล์ เมื่อไฟล์ใหม่ เมื่อไฟล์มีอยู่ แต่ว่างเปล่าทั้งหมด ในสามกรณีข้างต้นทั้งหมดฉันต้องการเรียกใช้ autocmd โดยเฉพาะฉันต้องการเริ่มโหมดแทรกโดยอัตโนมัติสำหรับสถานการณ์ข้างต้นเท่านั้น (ไม่ใช่เมื่อฉันเปิดไฟล์ที่มีอยู่แล้ว & ไม่ว่าง) UPDATE: ฉันได้ลองทำสิ่งต่อไปนี้ในของฉัน_vimrcแต่ไม่มีโชค (บวกด้วยฉันไม่แน่ใจว่ามีฟังก์ชั่นในกลุ่มที่นับจำนวนตัวอักษรในไฟล์ (เพื่อดูว่ามันเป็นศูนย์) ก่อนเปิดหรือไม่: if @% == "" || filereadable(@%) autocmd BufRead,BufNewFile * startinsert endif

1
จะเปลี่ยนวิธีการยกเลิกแบบละเอียดเป็นกลุ่มได้อย่างไร?
uในบางจุดที่เป็นกลุ่มของฉันจะยกเลิกคำทั้งหมดเมื่อกด [i]typing some words[C-c][u] จะส่งผลให้ typing some อย่างไรก็ตามการเลิกทำแบบย่อดูเหมือนจะเปลี่ยนเป็นการลบจดหมายทีละครั้ง [i]typing some words[C-c][u] ผลลัพธ์ใน typing some word ฉันจำได้ว่าอ่านอะไรบางอย่างเกี่ยวกับการปรับแต่งการเลิกเป็นกลุ่มใน Practical Vim แต่ฉันจำไม่ได้ว่าจะควบคุมมันอย่างไร ความช่วยเหลือใด ๆ ชื่นชม!
11 undo-redo 

2
ค้นหาไฟล์ทุกรุ่นในแผนผังเลิกทำ
มีวิธีที่ง่ายกว่าในการค้นหาการเปลี่ยนแปลงที่เฉพาะเจาะจงในแผนผังการเลิกทำ Vim มากกว่าแค่ดูไฟล์แบบเก่าแบบสุ่มทีละไฟล์ (ไม่ว่าจะใช้คำสั่ง vanilla VIM, Gundo หรือปลั๊กอินอื่น)? โดยอุดมคติแล้วฉันต้องการป้อนรูปแบบการค้นหาที่จะจับคู่กับ diffs ทั้งหมดที่แสดงในบานหน้าต่างแสดงตัวอย่างโดย Gundo แล้วให้ Gundo แสดงให้ฉันเห็นว่าเวอร์ชันใดมี diffs ที่ตรงกับการค้นหานั้น คำถามนี้ถามอะไรบางอย่างที่เกือบจะเหมือนกัน แต่ผู้ถามยอมรับคำตอบที่แนะนำ Gundo เพียงอย่างเดียวซึ่งน่าอัศจรรย์แม้ว่ามันจะดูเหมือนจะไม่ทำสิ่งที่ฉันขอ ฉันได้แหลมนี้เป็นคุณสมบัติใหม่สำหรับ Gundoแต่ไม่ได้รับคำตอบ แก้ไข:มีการร้องขอแบบเปิดสำหรับคุณลักษณะนี้เพื่อเลิกใช้ หมายเหตุ:คำถามนี้ได้รับการ "อพยพด้วยตนเอง" จากsuperuser
11 undo-redo 

2
วิธีรันคำสั่ง python สำหรับแต่ละบรรทัด?
ฉันเป็นตัวอย่างโค้ดต่อไปนี้ซึ่งแก้ไขบรรทัดปัจจุบันโดยใช้คำสั่ง Python: :py import vim; vim.current.line="["+vim.current.line+"]" ฉันจะใช้คำสั่งนี้สำหรับแต่ละบรรทัดในไฟล์ปัจจุบันได้อย่างไร ที่เกี่ยวข้อง: คุณสามารถใช้ Python ใน Vim ได้อย่างไร? ที่ stackoverflow

1
ทำไมลำดับของ: set bg = dark และ: set bg = light สำคัญ?
ในขณะที่พยายามจับคู่จานสีของเทอร์มินัลกับ GVim ฉันสังเกตเห็นสิ่งนี้: เมื่อฉันเปิด GVim และ Vim ฉันเห็น: (นั่นคือไฟล์เดียวกันของฉันvimrc) ถ้าฉันทำ:set t_Co=256ไม่มีอะไรเกิดขึ้นใน GVim (ยกเว้นว่าจะกะพริบ) ในขณะที่สีในเทอร์มินัลตอนนี้ดูแตกต่างกัน ถ้าฉันทำ:set bg=darkตอนนี้ก็ไม่ได้ทำให้แตกต่าง (อีกครั้ง GVim กระพริบ) ถ้าฉันทำ:set bg=lightแล้วจากนั้น:set bg=darkอีกครั้งฉันจะได้รับ: ทั้งสอง:set bg=darkและ:set t_Co=256มีอยู่ในของฉันvimrc ทำไมจะไม่ได้ฉัน:set bgและ:set t_Coติดและทำไมไม่ตั้งค่า:set bg=darkอีกครั้งหลังจากที่:set bg=lightสร้างความแตกต่างที่ แต่เดิมไม่ได้? ฉันใช้ Arch Linux, terminal เป็น GNOME Terminal .gvimrcและฉันไม่ได้มี $ vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, …

2
แสดงประวัติคำสั่งด้วย showcmd
เมื่อใช้set showcmdVim แสดงคำสั่งบางส่วนในบรรทัดสุดท้ายของหน้าจอ ตัวอย่างเช่นในโหมดปกติเมื่อพิมพ์คำสั่งdt.บรรทัดสุดท้ายจะแสดงขึ้นdtมาจากนั้นเมื่อคุณกด.คำสั่งเสร็จแล้วจึงไม่มีอะไรปรากฏขึ้น มีวิธีแสดงคำสั่งแบบเต็มหรือไม่? ตัวอย่างเช่นเมื่อพิมพ์จะแสดงเป็นdt.gU(อันดับแรก dt.และเมื่อเริ่มพิมพ์คำสั่งที่สองคำสั่งแรกจะถูกล้างเพื่อที่ว่าในท้ายที่สุดgU(จะปรากฏเท่านั้น สิ่งนี้อาจมีประโยชน์เช่นในการแสดงภาพ GIF และเพื่อตรวจสอบว่าคุณพิมพ์สิ่งที่คุณต้องการหากคุณเผชิญกับผลลัพธ์ที่ไม่คาดคิด

2
แท็บที่มีลักษณะคล้าย Zsh ของเส้นทางบางส่วน
เกี่ยวข้องกับBash-like บางส่วนของแท็บที่สมบูรณ์สำหรับชื่อไฟล์ใน Vim หนึ่งในคุณสมบัติที่ยอดเยี่ยมอย่างแท้จริงของzshคือการที่คุณสามารถพิมพ์ตัวอย่างเช่นls /u/s/m/m/who.1กดและมีมันจะเสร็จสมบูรณ์Tab ls /usr/share/man/man1/who.1.gzเมื่อคุณคุ้นเคยกับมันแล้วมันน่ารำคาญมากที่จะกลับไป/u<tab>/s<tab>/m<tab>/m<tab>...โดยเฉพาะอย่างยิ่งเมื่อเส้นทางบางส่วนทั้งหมดสามารถแก้ไขได้เพียงเส้นทางเดียวเท่านั้น แต่แต่ละองค์ประกอบอาจมีความสำเร็จที่หลากหลาย สิ่งนี้สามารถเกิดขึ้นได้ในกลุ่มตัวอย่างเช่นเมื่อใช้:eหรือ:cd? มีคุณสมบัติอื่น ๆ ที่เกี่ยวข้องกับเส้นทางที่เป็นประโยชน์ใน zsh เช่นการใช้cd foo barเพื่อย้ายไปยังเส้นทางที่เทียบเท่ากับfooแทนที่ด้วยbar(เช่น/blah/foo/baz/yadaกลายเป็น/blah/bar/baz/yada) หากมีวิธีการแก้ปัญหาที่นำสิ่งเหล่านี้มาด้วย (โดยหลักแล้วมอบหมายงานที่เกี่ยวข้องกับเชลล์ให้กับเชลล์ที่ทำงานได้ดีมาก) มันจะดีมาก

2
ลดความเร็วในการโหลดเป็นกลุ่ม
ฉันใช้https://github.com/carlhuda/janus vim distribution อย่างชัดเจนและไม่พอใจกับความเร็วในการโหลด อะไรจะเป็นวิธีที่ดีที่สุดในการทำโปรไฟล์และความเร็วในการโหลด vim? จะน่าสนใจในการเปรียบเทียบความเร็วในการโหลดกับhttp://vim.spf13.com/

3
ลากเส้นอัตโนมัติเมื่อเขียน markdown ใน VIM
บ่อยครั้งที่ฉันเขียน markdown ใน VIM และจะมีย่อหน้าใน markdown เหล่านั้น เพื่อช่วยในการแก้ไขของฉันฉันตั้งค่า Vim ของฉันเพื่อตัดบรรทัดบน 80 ตัวอักษร มันใช้งานได้ดีถ้าฉันพิมพ์ต่อไป แต่ปัญหาคือถ้าฉันต้องแก้ไขบางอย่างมันน่ารำคาญมาก ตัวอย่าง (นำมาจากตรรกะคำสั่งแรกของวิกิพีเดีย): The adjective "first-order" distinguishes first-order logic from higher-order logic in which there are predicates having predicates or functions as arguments. In first-order theories, predicates are often associated with sets. In interpreted higher-order theories, predicates …


3
การนำทางโดยใช้ SSH
ฉันรู้ว่าสามารถใช้vim scp://host/path/to/fileเพื่อแก้ไขไฟล์ระยะไกลในท้องถิ่นแล้วอัปเดตเครื่องระยะไกลเมื่อบันทึก ( :w) อย่างไรก็ตามฉันต้องการทราบว่าเป็นไปได้ที่จะนำทางผ่านไดเรกทอรีโดยใช้ ssh (หรือหากมีปลั๊กอินที่จะทำ) NERDTree ไม่สนับสนุนและเมื่อ viming ลงในโฟลเดอร์แม้ว่า netrw อนุญาตให้ฉันนำทางไปยังไดเรกทอรีการเปิดไฟล์ไม่ทำงาน
11 netrw  ssh 

1
ไม่สามารถพิมพ์ Unicode ด้วย Gvim และ VIM บน Windows 7
ฉันต้องการพิมพ์ภาษาต่าง ๆ โดยใช้ (g) Vim แต่เมื่อฉันเปลี่ยนเป็นภาษาอื่นโดยใช้แถบภาษา (ตัวอักษรเทวนาครีหรือภาษาฮินดี) และพิมพ์อะไรก็ได้ (g) vim จะปรากฏ??? ??ขึ้น สิ่งที่ฉันพยายาม: write ++enc=utf-8 foo.txt set fileencoding=utf-8 set enc=utf-8 ข้อมูล: รุ่น GVim: 7.4 และยังมี + multi_byte ไม่มีการเปลี่ยนแปลงในไฟล์ vimrc เริ่มต้น ฉันเพิ่งเริ่มต้นด้วย (g) เป็นกลุ่ม

3
เป็นไปได้หรือไม่ที่จะสร้างการแมปด้วยพารามิเตอร์?
ฉันได้สร้างการแมปสองสามอย่างเช่น: :nnoremap <buffer> <leader>xyzABC :call SomeFunc('ABC')<CR> :nnoremap <buffer> <leader>xyzDE :call SomeFunc('DE')<CR> :nnoremap <buffer> <leader>xyzFoo18 :call SomeFunc('Foo18')<CR> :nnoremap <buffer> <leader>xyzBar22 :call SomeFunc('Bar22')<CR> ซึ่งทำงานได้ตามที่ต้องการ ตอนนี้ฉันกำลังมองหาความเป็นไปได้ในการสร้างเทมเพลตแผนที่ที่จะช่วยให้ฉันลบส่วนที่ซ้ำซ้อนที่เห็นได้ชัดของการแมปของฉันเช่น :nnoremap <buffer> <leader> xyz? :call SomeFunc(?)<CR> เพื่อที่ฉันสามารถผ่านใด ๆSomeFuncค่าเป็นพารามิเตอร์ มีความเป็นไปได้ไหม?

5
วิธีคัดลอกข้ามเทอร์มินัล
ฉันใช้ระบบ Linux สอง VIMS จะเปิดในสองขั้ว ตอนนี้ฉันต้องการคัดลอกข้อความจาก A ถึง B วิธีหนึ่งที่ทำได้คือเลือกข้อความใน A ใช้เมาส์เพื่อคัดลอกจากนั้นสลับเป็น B ในโหมดแทรกคำสั่ง<c-r>+จะวางข้อความ อย่างไรก็ตามมีการดำเนินการโดยไม่ใช้เมาส์หรือไม่ เช่น"+yyในเมื่อสวิทช์ไป B o<c-r>+? ฉันสำรวจคู่ของชุดค่าผสมในไร้สาระ และฉันค้นหา "คัดลอกข้ามเทอร์มินัล" แต่ไม่พบอะไรเลย @statox ผู้ใช้แสดงให้เห็นหนึ่งในการแก้ปัญหาการใช้โหมดภาพคือv$"+yในเมื่อสวิทช์ไป o<c-r>+B มีวิธีง่าย ๆ ที่สามารถคัดลอกข้อความใน A โดยไม่ต้องเข้าสู่โหมด v หรือไม่? การเข้าสู่โหมด v อย่างเหมาะสมนั้นไม่ได้เกี่ยวข้องกับการกดปุ่มมากเกินไปเพียงแค่สงสัยว่ามีวิธีที่ดีกว่านี้หรือไม่ เช่น. หากเคอร์เซอร์อยู่ตรงกลางของบรรทัดให้yyคัดลอกทั้งบรรทัด (เพื่อลงทะเบียน") ในขณะที่0v$yทำสิ่งเดียวกันด้วยการกดปุ่มพิเศษ หรือคำถามของฉันสามารถลดลงได้หากมีวิธีที่มีการกดปุ่มน้อยกว่า0v$"+yการคัดลอกที่ฉันสามารถใช้<alt-tab>o<c-r>+เพื่อวาง

2
วิธีการทำแผนที่ซ้ำเมื่อกดปุ่มค้าง
ฉันมี.vimrcการแมปแบบง่าย ๆ เพื่อปรับขนาดหน้าต่างแยกได้อย่างง่ายดาย: noremap <Leader><UP> <C-w>+ noremap <Leader><DOWN> <C-w>- มันใช้งานได้ดี แต่เมื่อฉันต้องการปรับขนาดหน้าต่าง 10 บรรทัดฉันต้องกดและปล่อยLeader+ UP10 ครั้ง ฉันจะทำซ้ำการแมปนี้ในขณะที่กดปุ่มได้อย่างไร สิ่งที่ฉันต้องการคือเมื่อฉันกดLeader+ UPการแมปจะถูกนำไปใช้หนึ่งครั้งหลังจากนั้นในช่วงเวลาสั้น ๆ มันจะถูกนำไปใช้อีกครั้งและอื่น ๆ ในขณะที่ฉันกดปุ่มค้างไว้ หมายเหตุ:ฉันรู้ว่าเป็นไปได้ที่จะนำหน้า<C-w>+ด้วยการนับและฉันสามารถเข้ารหัสในการทำแผนที่หรือเพียงแค่ใส่จำนวนก่อนที่จะใช้การทำแผนที่ แต่นั่นไม่ใช่วิธีที่ฉันต้องการจะทำ Note2:ฉันรู้ว่าการแมปยอดนิยมเพื่อปรับขนาดหน้าต่างคือการใช้+และ-ปุ่มที่กดได้ง่ายกว่าหลายครั้ง แต่ฉันไม่ต้องการใช้ปุ่มเหล่านั้นเพื่อทำเช่นนั้น

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