Vi & Vim

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

3
`softtabstop` ใช้ทำอะไร?
ฉันรับทราบถึงการตั้งค่าที่เกี่ยวข้องกับแท็บเหล่านี้ใน Vim: ts sw expandtab smarttab sts set ts=4 sw=4 expandtab smarttabตั้งค่าปกติของฉันคือ แต่ตามstsเอกสารถ้าexpandtabไม่ได้ตั้งค่ามันจะพยายามใช้การรวมกันของช่องว่างและแท็บเพื่อชดเชยจำนวนช่องว่างที่ต้องการสำหรับขนาดแท็บ ฉันไม่สามารถนึกถึงสถานการณ์ที่เป็นประโยชน์สำหรับการตั้งค่านี้ได้: ทำไมบางคนต้องการมีแท็บและช่องว่างจำนวนคงที่ซึ่งอาจทำให้เกิดความวุ่นวายขึ้น ข้อดีอย่างเดียวของการทำสิ่งนี้ที่ฉันคิดได้ก็คือลดจำนวนตัวอักษรและทำให้ขนาดไฟล์ลดลงซึ่งดูแปลกสำหรับฉัน

3
ตัวแยกแบ่งเป็นกลุ่มจะน้อยกว่าความกว้างคอลัมน์เต็มได้ไหม
ฉันใช้ตัวจัดการหน้าต่างแบบเรียงต่อกัน (ยอดเยี่ยม) + เทอร์มินัลมัลติเพล็กเซอร์ (tmux) + แยกด้านในของกลุ่ม ฉันไม่มีการตกแต่งหน้าต่างเลยดังนั้นคุณจะไม่มีการแยกภาพระหว่างพวกเขาเลยถ้าเนื้อหาของโปรแกรมไม่ได้แจก ฉันค่อนข้างสบายใจกับกระบวนทัศน์นี้เพราะฉันใช้จอภาพหลายจอและจัดกลุ่มงานตามหน้าจออยู่แล้ว หากสองหน้าต่างไม่มีเหตุผลที่จะอยู่เคียงข้างพวกเขาจะไม่อยู่ที่นั่นตั้งแต่แรก อย่างไรก็ตามสิ่งนี้ทำให้เกิดความไม่ลงรอยกันทางสายตาเล็กน้อยซึ่งความแตกต่างที่เห็นได้ชัดเจนที่สุดคือความหมายที่น้อยที่สุด หน้าต่าง Xorg ‹|› window = ไม่มีอะไรเลย บานหน้าต่าง Tmux ‹|› pane = 1px divider line Vim split ‹|› split = 1 คอลัมน์สีกว้างอักขระ นี่คือตัวอย่างที่แสดงหน้าต่างด้านข้างหน้าต่างบานหน้าต่างและแผงแยก: แม้ว่าจะไม่ได้คลิกไปที่เวอร์ชันความละเอียดเต็ม แต่เส้นแบ่งสีขาวที่คุณเห็นคือรอยแตกที่สำคัญที่สุดบนหน้าจอ (โปรดสังเกตว่าคอลัมน์สีเทาที่ด้านขวาของเซสชันเป็นกลุ่มนั้นเป็นไฮไลต์คอลัมน์ที่ 80 ไม่ใช่ตัวแบ่งใด ๆ ถึงแม้ว่าฉันมักจะทำงานในขนาดนั้น) ฉันรู้วิธีเปลี่ยนอักขระที่วาดในการแยกหรือลดความคมชัดของสี สิ่งที่ฉันต้องการจะทำคือใช้แถบแยกเดียวกับ tmux ที่ไม่ใช้ความกว้างใด ๆ เพราะมันถูกวาดในระหว่างคอลัมน์มากกว่าหนึ่ง เป็นไปได้ด้วย vim ตาม terminal? …

8
วิธีเพิ่มหมายเลขบรรทัดถาวรในไฟล์ได้อย่างไร
ฉันมีไฟล์ข้อความเช่นนี้ (ใช้ gVim บน Windows) foo bar baz quux corge grault garply waldo fred plugh [...150 more lines...] xyzzy thud ฉันต้องการเพิ่มตัวเลขในแต่ละบรรทัดในไฟล์ ไม่ได้ใช้:set numberแต่เพิ่มหมายเลขเป็นข้อความนำหน้าแต่ละบรรทัดดังนี้ดังนั้นหมายเลขจึงเป็นส่วนหนึ่งของไฟล์ 1. foo bar baz quux 2. corge grault garply 3. waldo fred plugh [...~150 more lines...] 155. xyzzy thud

4
ฉันจะสร้างช่องว่างโดยไม่ตั้งใจได้อย่างไรก่อนเปิดวงเล็บปีกกาแบบหยิก
ฉันรู้ว่านี่เป็นคำถามที่แปลกและอาจไม่ได้เป็นฟอรัมที่เหมาะสมในการโพสต์ แต่นี่เป็นปัญหามาหลายปีแล้ว ในบางครั้งสมมติว่าเดือนละครั้งเมื่อฉันเขียนโปรแกรมฉันจะแนะนำช่องว่างแบบไม่หยุดพักแทนที่จะเป็นช่องว่างปกติก่อนเปิดวงเล็บปีกกา สิ่งนี้เกิดขึ้นเมื่อฉันเขียน () { สิ่งนี้นำไปสู่ข้อบกพร่องที่เป็นขุยลึกลับ ส่วนคำสั่ง CSS ที่ไม่ใช้ จนกว่าฉันจะจำสิ่งนี้อาจเป็นได้ เท่าที่ฉันรู้สิ่งนี้เกิดขึ้นในกลุ่ม แต่เนื่องจากตัวแก้ไขหลักของฉันมันอาจไม่เคยเกิดขึ้นในซอฟต์แวร์อื่น แต่ไม่มีเพื่อนร่วมงานของฉันในงานสุดท้ายของฉันที่เคยมีปัญหานั้นถึงแม้ว่าพวกเขาจะใช้รูปแบบแป้นพิมพ์เดียวกับฉัน ฉันเป็นคนเดียวที่ใช้เสียงเรียกเข้าเป็นประจำแม้ว่านั่นเป็นสาเหตุที่ฉันโพสต์ที่นี่ ... เรื่องนี้เกิดขึ้นกับฉันอย่างน้อยใน Ubuntu 14.04, 16.04 และ mac os x :set list ไม่เปิดเผย ฉันกำลังใช้รูปแบบแป้นพิมพ์ภาษาฝรั่งเศส - แคนาดาหมายถึงอักขระที่ใช้วงเล็บปีกกาทำได้โดยการกด alt + ` ฉันเหนื่อยมากกับปัญหาที่เกิดขึ้นมันไม่บ่อยพอที่ฉันจะลืมมันไปเรื่อย ๆ หากคุณไม่สามารถบอกฉันได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้นการกำหนดค่าบางอย่างเพื่อเน้นตัวละครนั้นด้วยวิธีที่ชัดเจนจะเป็นคำตอบที่เหมาะสมและช่วยแก้ปัญหานี้ได้อย่างแท้จริง

4
วิธีที่ง่ายที่สุดในการลบคำว่า "คอมโพสิต"?
ขออภัยหาก "คอมโพสิต" ไม่ใช่คำศัพท์ด้านเทคนิค ฉันหมายถึงต่อไปนี้: Hi, I-am-a-composite-word and we are not ฉันต้องการลบเฉพาะคำประสม ในโหมดคำสั่งถ้าฉันเลื่อนเคอร์เซอร์ไปที่Iจากนั้นทำซ้ำdwสองสามครั้งหรือพิมพ์dwอีกครั้งดีกว่าตามด้วยการ.กดไม่กี่ครั้งจะเป็นการหลอกลวง อย่างไรก็ตามด้วยเหตุผลต่าง ๆ ฉันพบว่าตัวเองทำสิ่งนี้ค่อนข้างบ่อยในระหว่างวันดังนั้นฉันจึงสงสัยว่ามีวิธีที่เรียบง่ายกว่านี้หรือไม่ ป.ล. ฉันไม่คิดว่าคำสั่งd9wจะเป็นวิธีที่ง่ายกว่า การนับลำดับของคำและขีดคั่นที่ยาวนานนั้นไม่ใช่ความคิดของฉัน "เรียบง่าย"

2
ฉันจะใช้หมายเลขบรรทัดเพื่อคัดลอกบรรทัดไปยังตำแหน่งที่เคอร์เซอร์อยู่ได้อย่างไร
หลายครั้งที่ฉันอยู่ในสถานการณ์แบบนี้: 1. <Line 1> 2. <Line 2> 3. <Line 3> 4. <Cursor is here> 5. <I want to copy line 1 here> ทางออกที่ง่ายคือmm:1<CR>yy`mp- ทำเครื่องหมายที่บรรทัดที่ 4 ไปที่บรรทัดที่ 1 คัดลอกกลับไปที่เครื่องหมายและวาง มีวิธีแก้ปัญหาของเหลวสั้นลงหรือมากขึ้นสำหรับเรื่องนี้? ฉันทำสิ่งนี้บ่อยพอที่ฉันจะทำแผนที่สำหรับมัน

4
โทนสีที่ดีขึ้น
ฉันเริ่มใช้โหมด diff ในที่ทำงานและสิ่งหนึ่งที่ฉันสังเกตเห็นคือสีสดใสจริง ๆ ซึ่งไม่ได้ช่วยเมื่อคุณพยายามค้นหาความแตกต่างในไฟล์ขนาดใหญ่เป็นเวลานาน มีโทนสีใดบ้างที่ผู้คนปรับแต่งเพื่อให้โหมด diff ง่ายขึ้นในสายตา?
20 vimdiff 

1
เหตุใดจึงไม่ใช้ Vimball ทั่วไป
ฉันได้เห็นว่าจำนวนมากของกลุ่มปลั๊กอินไม่ได้ดูเหมือนจะมีVimballs Vimballs เป็น / เป็นพื้น tarball สำหรับปลั๊กอินที่เป็นกลุ่มรู้วิธีการติดตั้ง พวกเขา / จึงสะดวกกว่าเล็กน้อยที่ใช้tar -xvf เพราะคุณไม่ต้อง / ไม่ต้องกังวลว่า tarball มีโครงสร้างไดเรกทอรีซ้อนกันในวิธีที่ต่างกันเช่นถ้ามันเริ่มต้นที่. vim หรือภายในโครงสร้างไดเรกทอรี. vim หรือถ้ามีโฟลเดอร์หลักใน tarball ด้วยชื่อเดียวกันกับปลั๊กอิน ฯลฯ ฉันเห็นพวกมันน้อยลงเรื่อย ๆ และไม่มีปลั๊กอินใด ๆ ที่ฉันเคยเห็นใน Github มีความพยายามที่จะเลิกใช้งานหรือไม่ ถ้าเป็นเช่นนั้นทำไม นี่เป็นเพราะตอนนี้เรามี Vundle, Pathogen หรือไม่?

1
จะทำให้การเคลื่อนไหวเคารพ camelCase หรือ snake_case ได้อย่างไร?
เป็นเรื่องปกติที่จะใช้ทั้ง camelCase หรือ snake_case เพื่อแยกหลายคำซึ่งเป็นตัวระบุ มันจะดีถ้า "คำว่า" การเคลื่อนไหว ( b, w, e) จะตรวจสอบผู้ขอบเขตภายในระบุ พฤติกรรมนี้จะประสบความสำเร็จได้อย่างไร? (ปลั๊กอิน / vimrc / ... ?)

2
ฉันสามารถเปิดไฟล์ในอินสแตนซ์ Vim ที่มีอยู่จากคำสั่งภายนอกได้หรือไม่
บางแอปพลิเคชันมีแนวคิดของ"เซสชัน"ซึ่งคุณสามารถเรียกใช้คำสั่งเพื่อโหลดไฟล์ในอินสแตนซ์ที่มีอยู่ของแอปพลิเคชัน ตัวอย่างเช่นเมื่อฉันพิมพ์: $ firefox http://vi.stackexchange.com Firefox จะใช้กระบวนการ Firefox ที่มีอยู่อีกครั้งแทนที่จะสร้างกระบวนการใหม่ เป็นไปได้ด้วย Vim?

2
เป็นไปได้หรือไม่ที่จะใช้พื้นหลังสีสองแบบในบัฟเฟอร์กลุ่มเดียว?
ฉันกำลังมองหาวิธีแก้ปัญหาที่เป็นไปได้สำหรับการใช้สีพื้นหลังที่แตกต่างกันสองสีภายในบัฟเฟอร์ vim เดียวโดยขึ้นอยู่กับบริบทเช่นในตัวอย่างข้อความประเสริฐนี้ กรณีการใช้งานหนึ่งกรณีนั่นคือการโค้ดสีในไฟล์มาร์กอัปแตกต่างกันดังนั้นพวกเขาจึงโดดเด่นกว่า อย่างไรก็ตามฉันไม่เคยเห็นตัวอย่างพร้อมการตั้งค่าเช่นนั้น เป็นไปได้ทั้งหมดในกลุ่ม?

2
ทำไม Vim for Debian จึงถูกคอมไพล์โดยไม่มีคลิปบอร์ด
ฉันอยากรู้ว่าทำไมแพคเกจ Debian เริ่มต้นสำหรับกลุ่ม (ที่คุณได้รับตามปกติsudo apt-get install vim) ไม่ได้รับการคอมไพล์ด้วยการสนับสนุนคลิปบอร์ด? ทั้งปกติ-clipboardหรือ-Xterm-clipboardมีการใช้งานว่าทำไม ? อาจมีเหตุผลที่จะไม่รวม -Xterm-clipboard ในการติดตั้ง Debian โดยไม่ต้องติดตั้ง X-server แต่เป็นปกติ-clipboardหรือไม่ ความเข้าใจใด ๆ ว่าทำไมสิ่งนี้จึงเป็นประโยชน์ (ความชัดเจน: ฉันรู้ว่าฉันสามารถคอมไพล์ Vim ด้วยการตั้งค่าสถานะเหล่านี้ได้ฉันต้องการทราบว่าเพราะเหตุใดจึงไม่เปิดใช้งานโดยค่าเริ่มต้น )
20 linux  installing 

1
อะไรคือความแตกต่างระหว่าง“ ลำดับคีย์ที่แมป” และ“ รหัสคีย์”? (timeoutlen v ttimeoutlen)
คู่มือที่เป็นกลุ่มบอกว่าเราสามารถใช้timeoutlenเพื่อระบุความยาวหมดเวลาของคีย์ลำดับที่แมปและสามารถใช้ttimeoutlenเพื่อระบุความยาวหมดเวลาของการคีย์รหัส : การตั้งค่าที่มีประโยชน์จะเป็น :set timeout timeoutlen=3000 ttimeoutlen=100 (หมดเวลาในการทำแผนที่หลังจากสามวินาทีหมดเวลากับรหัสที่สำคัญหลังจากที่สิบวินาที) อะไรคือคีย์รหัส ? พวกเขาแตกต่างจากลำดับของคีย์ที่แมปอย่างไร ฉันรู้ว่าตัวอย่างของลำดับคีย์แมปjkมาจากแผนที่ด้านล่าง: inoremap jk <esc> ในตัวอย่างนี้เมื่อฉันอยู่ในโหมดแทรกและประเภทj, กลุ่มจะรอtimeoutlenมิลลิวินาทีสำหรับฉันที่จะกดkก่อนตัดสินใจว่าเจตนาของฉันคืออะไร แต่รหัสสำคัญคืออะไรและttimeoutlenมีผลกับมันอย่างไร ขอบคุณ.

5
การนำทางในโหมดแทรก
hjklในที่สุดผมก็ตัดสินใจที่จะทิ้งปุ่มลูกศรสำหรับการนำทางในความโปรดปรานของ ฉันใช้Vim hardmodeปลั๊กอินเพื่อปิดใช้งานปุ่มลูกศร ฉันคุ้นเคยกับการนำทางค่อนข้างเร็ว แต่ปรากฎว่าการนำทางในโหมดแทรกนั้นเป็นไปไม่ได้ มีวิธีแก้ปัญหานี้หรือไม่? (โหมดแทรกที่มีอยู่ไม่ใช่วิธีการแก้ปัญหา)

4
ฉันจะเปลี่ยนขนาดของการเยื้องได้อย่างไร
ฉันเพิ่งค้นพบว่าฉันสามารถเยื้องและไม่เยื้องได้อย่างง่ายดายใน Vi ด้วย: <<และ>> โดยค่าเริ่มต้นจะเพิ่มtabตัวละคร ตอนนี้ฉันสงสัยว่านี่จะเป็นช่องว่างจำนวนหนึ่งผ่านการกำหนดค่าในของฉัน.vimrcหรือไม่ และฉันควรทำอย่างไร?

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