Vi & Vim

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

1
ฉันจะแมป d [นับ] d ได้อย่างไร
NB คำสั่งนี้ไม่ได้ซ้ำกับคำสั่ง "d3fg" อย่างไร โปรดอ่านก่อนลงคะแนนเพื่อปิด! ฉันได้มาบิตของอับจนในของฉันการแสวงหาที่จะได้รับการลบการทำงานเล็ก ๆ เช่นคนใหญ่ ปัญหาที่ฉันมีคือฉันไม่สามารถหาวิธีการแมปคำสั่งd3dใหม่ได้ ที่จริงแล้วฉันไม่สามารถเข้าใจได้ว่าพวกเขาทำงานอย่างไรตั้งแต่แรกและไม่พบการกล่าวถึงพวกเขาในความช่วยเหลือของ Vim * d3jตรงไปตรงมา: มันใช้dกับการ3jเคลื่อนไหว 3ddตรงไปตรงมา: มันรันddคำสั่งด้วย "count" ของ 3 d3d ดูเหมือนว่ามันควรจะตรงไปตรงมามันใช้dโอเปอเรเตอร์กับ ... แต่อะไรนะ3d? มันไม่ใช่การเคลื่อนไหว หากคุณพิมพ์3dด้วยตัวเอง Vim จะถือว่าเป็นนับตามด้วยโอเปอเรเตอร์และรออย่างอดทนสำหรับการป้อนข้อมูลเพิ่มเติม และคุณไม่สามารถใช้โอเปอเรเตอร์กับผู้ให้บริการรายอื่นได้ ddไม่ได้อธิบายไว้ในความช่วยเหลือเป็นลำดับของผู้ให้บริการสองราย มันเป็นคำสั่งสองแป้นที่แยกต่างหาก (เปรียบเทียบdcซึ่งไม่ทำอะไรเลย) นอกจากนี้ยังไม่ปรากฏว่าในกรณีที่การวางตำแหน่งการนับมีความยืดหยุ่นสำหรับคำสั่งที่ต้องใช้การกดแป้นสองครั้ง: 2gjเลื่อนเคอร์เซอร์ลงสองบรรทัดหน้าจอ แต่ละg2jทิ้งการกดปุ่มสองครั้งแรกทั้งหมดและเลื่อนเคอร์เซอร์ลงหนึ่งบรรทัด แล้วมันทำงานอย่างไร นี่เป็นกรณีพิเศษในรหัสภายในของ Vim ใช่ไหม มีวิธีใดบ้างที่ฉันสามารถสร้างการd[count]dแมปได้? แก้ไข : มันเป็นวัตถุข้อความหรือไม่ :h text-objectsไม่รวมไว้ในรายการ "คำสั่งการเลือกวัตถุข้อความ" แต่จะรวม dd ในรายการการลบ "จัดกลุ่มจากวัตถุขนาดเล็กไปจนถึงวัตถุขนาดใหญ่" และd2awจะลบคำที่อยู่ใต้เคอร์เซอร์และคำต่อไปนี้ …

2
ฉันสามารถใช้ Vi หรือ Vim กับโปรแกรมอ่านหน้าจอและ / หรืออุปกรณ์อักษรเบรลล์ได้หรือไม่
ฉันสามารถใช้ Vi หรือ Vim กับโปรแกรมอ่านหน้าจอและ / หรืออุปกรณ์อักษรเบรลล์ได้หรือไม่ ถ้าเป็นเช่นนั้นฉันจะไปเกี่ยวกับมันได้อย่างไร จำเป็นต้องมีการตั้งค่าพิเศษหรือไม่?

4
ฉันจะระงับข้อความ“ read from STDIN” จากภายใน Vim ได้อย่างไร?
เมื่อใช้ Vim เพื่ออ่านจาก stdin จะพิมพ์ข้อความที่ให้ข้อมูล: $ echo foo | vim - Vim: Reading from stdin... $ นี่เป็นเพียงตัวอย่าง การใช้งานจริงไม่อนุญาตให้สร้างเชลล์ vim <(echo foo)ไม่ใช่ตัวเลือก ฉันสามารถระงับการว่าการใช้เพียงตัวเลือกที่เป็นกลุ่มและ / หรือการตั้งค่า vimrc? ในกรณีที่คุณจำเป็นต้องรู้ว่านี่คืออะไรฉันพยายามใช้Vim เพื่ออ่าน manpages (shameless plug) คน GNU ไม่อนุญาตให้สร้างเปลือกในMANPAGERและโดยใช้ftplugin/man.vimและสิ่งอื่น ๆ MANPAGER="vim -"ก็มีการจัดการที่ประสบความสำเร็จจะมีประสบการณ์ที่สะดวกสบายโดยใช้เพียง ความรำคาญที่เหลืออยู่ล่าสุดคือข้อความที่ไม่น่าดูที่พิมพ์หลังจาก manpage ทุกอันที่ฉันดู
18 vimrc  options 

2
อะไร: เปิดทำเป็นกลุ่ม?
เอกสารของ Vim มีไว้เพื่อกล่าวเกี่ยวกับ:openคำสั่ง: This command is in Vi, but Vim only simulates it: *:o* *:op* *:open* :[range]o[pen] Works like |:visual|: end Ex mode. {Vi: start editing in open mode} :[range]o[pen] /pattern/ As above, additionally move the cursor to the column where "pattern" matches in the cursor line. Vim does not …
18 ex-mode 

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

2
เลื่อนหน้าจอไม่ใช่เคอร์เซอร์เมื่อใช้ scrollwheel
ฉันกำลังใช้ Vim ในเทอร์มินัลดังนั้นการเลื่อนด้วยล้อเลื่อนจะใช้\e[Aและ\e[Bไวยากรณ์ (ที่\eเป็นสัญลักษณ์\x1bหรือหลบหนี) อย่างไรก็ตาม Vim ตีความสิ่งนี้โดยการเลื่อนเคอร์เซอร์ขึ้นหรือลงหนึ่งบรรทัด พฤติกรรมที่ต้องการคือหน้าจอถูกเลื่อนขึ้นหรือลงเช่น<C-e>และ<C-y>ทำ ฉันจะบอกให้ Vim เลื่อนหน้าจอได้อย่างไรเมื่อฉันใช้ล้อเลื่อนขณะที่ยังคงเคอร์เซอร์อยู่ในบรรทัดเดียวกัน สิ่งนี้จะทำงานได้ในโหมดทั่วไปทั้งหมด (การเลือกแบบปกติการเลือกแบบภาพ) ตัวอย่างเช่นฉันได้ลองแล้ว:nnoremap <esc>[A <C-e>(แทนที่<esc>ด้วยอักขระตัวอักษรตัวอักษรแทรกด้วยCtrl+V Esc) แต่สิ่งนี้พิสูจน์แล้วว่าไร้ประโยชน์ ฉันใช้ Vim 7.4.52 บน Ubuntu 14.04 กับ GNOME

3
'[Command Line]' คืออะไรซึ่งบางครั้งก็เกิดขึ้นเมื่อฉันพยายามที่จะออกและฉันจะออกได้อย่างรวดเร็วได้อย่างไร
บางครั้งเมื่อฉันพยายามออกจากกลุ่มฉันได้รับสิ่งที่มีลักษณะเช่นนี้: ฉันไม่แน่ใจว่าฉันจะเรียกสิ่งนี้โดยบังเอิญได้อย่างไร แต่วิธีการปัจจุบันของฉันในการหลบหนีคือการกดปุ่มสุ่มและในที่สุดมันก็จะหายไป สองคำถาม: ฉันจะเรียกมันอย่างไร (ฉันใช้:qเพื่อออกเป็นกลุ่ม) โดยไม่ตั้งใจและ ฉันจะออกจากมันได้อย่างรวดเร็วและกลับไปยังสิ่งที่ฉันกำลังทำงานอยู่ได้อย่างไร

4
ฉันจะติดตั้ง Vim แบบ 64 บิตบน Windows ได้อย่างไร
หน้าดาวน์โหลดของ Vim แจ้งว่าเวอร์ชัน 64 บิตถูกยกเลิก: Win64 Vim รุ่น 32 บิตทำงานได้ดีบน Windows 64 บิต มีไบนารี 64 บิต แต่ไม่ได้ใช้มากนักและหยุดการบำรุงรักษา ซึ่งเป็นสิ่งที่ดีฉันคิดว่ายกเว้น Vim 32- บิตที่ไม่ได้รับ Python 64 บิต has('python')? 0. ฉันมีตัวเลือกอะไรบ้างสำหรับการติดตั้ง 64-bit Vim โดยเฉพาะ (รวมถึง GVim) บน Windows ด้วยการสนับสนุนปลั๊กอินให้มากที่สุด เห็นได้ชัดว่าไบนารีจากครีมยังเป็นแบบ 32 บิต (ดูversion.txt) สำหรับ Cygwin ฉันไม่แน่ใจเกี่ยวกับการเรียกใช้ GVim ในตัวมัน ( เห็นได้ชัดว่าจำเป็นต้องมีการDISPLAYตั้งค่าซึ่งจะบ่งบอกถึงความจำเป็นในการใช้เซิร์ฟเวอร์ X ซึ่งเป็นอีกปัญหาหนึ่งที่ซับซ้อนของ Cygwin เอง) …

4
ฉันจะทำให้ Vim open help ในแนวตั้งได้อย่างไร
ฉันมักจะทำงานในสถานีแบบหล่นลงทำงานสูงประมาณ 25 ตัวอักษร เนื่องจากฉันชอบแท็บที่ใช้กับ windows 1มักจะทำให้พื้นที่แนวนอนจำนวนมากสูญเปล่า - ประมาณครึ่งหนึ่งของความกว้างเทอร์มินัล ด้านบนนั้นเป็นกลุ่มที่มีการตั้งค่าเริ่มต้นhelpheightเหลือเพียงไม่กี่บรรทัดของเนื้อหาไฟล์เมื่อฉันเปิดหน้าต่างวิธีใช้: มีวิธี:hใช้แยกแนวตั้งหรือไม่ ฉันทำได้: ลดลง helpheight ใช้<C-W>Lเพื่อย้ายหน้าต่างด้วยตนเอง ทำแผนที่หรือคำสั่งที่กำหนดเองซึ่งทำด้านบนสำหรับฉัน มีวิธีที่ง่ายกว่านี้ไหม? 1ผมทำใช้หน้าต่างเมื่อฉันต้องดูหลาย ๆ ไฟล์เข้าด้วยกัน แต่โดยปกติแล้วฉันต้องการให้แต่ละไฟล์อยู่ในบริบท (จิต) ของตัวเอง

4
การสนับสนุนด่วนสำหรับการติดตาม Python
ว่าฉันมีสคริปต์หลามกับข้อผิดพลาด runtime: $ cat example.py #! /usr/bin/env python3 a = 1/0 ซึ่งจะช่วยให้: $ python3 example.py Traceback (most recent call last): File "example.py", line 3, in <module> a = 1/0 ZeroDivisionError: division by zero ฉันต้องการให้เป็นกลุ่มเพื่อข้ามไปยังบรรทัดที่มีปัญหาของไฟล์นั้น (บรรทัดที่ 3 ในกรณีนี้) ฉันรู้ว่ากลุ่มสามารถทำเช่นนี้เพราะมันทำงานได้ดีสำหรับการจับข้อผิดพลาดในเวลารวบรวมใน C กับการgccใช้:makeและquickfixหน้าต่าง แน่นอนว่าฉันสามารถเติมหน้าต่าง Quickfix ของ Vim ด้วย:set makeprg=python3\ %แล้ว:makeแต่จะไม่ข้ามไปยังหมายเลขบรรทัดที่ traceback ชี้ไปที่ เมื่อฉันมองเข้าไป:copenก็แค่ไฮไลท์บรรทัดแรกของการติดตามและฉันไม่สามารถข้ามไปยังหมายเลขบรรทัดที่เกี่ยวข้องได้ …

2
ความสัมพันธ์ระหว่าง vi, nvi และ vim คืออะไร?
เมื่อวันที่ UNIXes nviบางบางครั้งผมพบว่าคำสั่งที่มีชื่อว่า มันเป็นโปรแกรมแก้ไขแบบ vi โดยไม่ต้องใช้ฟังก์ชั่นมากนัก อาจจะเป็นทางแยกของเก่าviหรือ ยังไงกันviเวอร์ชั่นไหนเป็นเวอร์ชั่นที่แตกต่างจากคนอื่น ๆ พวกเขามี "ต้นไม้ครอบครัว" คล้ายกับยูนิกซ์หรือไม่?

3
ดัมพ์เอาต์พุตของคำสั่ง vim ภายในลงในบัฟเฟอร์
ฉันจะดัมพ์คำสั่ง vim ภายใน (ไม่ใช่คำสั่งเชลล์) ลงในบัฟเฟอร์ใหม่ได้อย่างไร? ตัวอย่างเช่นฉันต้องการถ่ายโอนรายชื่อของปลั๊กอินทั้งหมด:enewจาก:scriptnamesเพื่อให้ฉันสามารถค้นหาได้

1
ฉันสามารถค้นหา Unicode ที่รวมอักขระใน Vim ได้หรือไม่
ฉันมีไฟล์ที่มีตัวอักษรã(ตัวพิมพ์เล็ก + รวมเครื่องหมายตัวหนอน) Encodingและมีทั้ง fileencoding แสดงให้เห็นว่าutf-8ga <a> 97, hex 61, octal 141 <~> 771, Hex 0303, Octal 1403 (แต่ด้วยการรวมเครื่องหมายตัวหนอนใน<>) และการg8แสดง 61 + cc 83 การค้นหาด้วย/a\%u0303ผลงานดี การค้นหาเพียงแค่\%u0303ให้รูปแบบ E486 ไม่พบ ฉันสามารถค้นหาเฉพาะอักขระที่รวมเข้าด้วยกันโดยไม่ต้องค้นหาอักขระพื้นฐานได้หรือไม่

3
เสียงเรียกเข้าเป็นตัวกำหนดขนาดของ“ การแก้ไข” เดี่ยวเมื่อใช้“ u” และ“ CTL-R”
เมื่อใช้uหรือCTL-Rเลิกทำการแก้ไขหรือทำซ้ำเป็นกลุ่มฉันดูเหมือนจะเปลี่ยนข้อความเป็นข้อความไม่ใช่แค่การกดแป้นพิมพ์ครั้งล่าสุด อะไรเป็นตัวกำหนดขนาดของก้อนที่ถือว่าเป็นการแก้ไขครั้งเดียว?

1
ไปที่ไฟล์สุดท้ายในกลุ่ม
สามารถเปิดไฟล์ข้อความหลายไฟล์พร้อมกันได้ vim *txt ฉันรู้ว่าฉันสามารถใช้:<int>nเพื่อย้าย<int>ไฟล์ไปข้างหน้าได้แต่ฉันไม่รู้ว่าจะไปยังไฟล์ที่เปิดล่าสุดได้อย่างไร จนถึงตอนนี้ฉันพยายาม:1000nเกินความตั้งใจ แต่นั่นทำให้เกิดข้อผิดพลาด E165: ไม่สามารถไปได้ไกลกว่าไฟล์สุดท้าย จากนั้นฉันเพียงรีสอร์ทเพื่อค้นหา binary พยายามที่จะได้รับการสิ้นสุดซึ่งต้องใช้เวลาสักเช่น:500n, :250n, 125n... ฉันจะไปยังไฟล์ที่เปิดล่าสุดเป็นกลุ่มได้อย่างไร

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