Vi & Vim

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

2
วิธีกำหนดค่าคาถาเพื่อละเว้นสภาพแวดล้อมบางอย่างใน LaTeX
มีวิธีที่จะบอกเป็นกลุ่มไม่ให้ตรวจสอบการสะกดคำของเอกสารลาเท็กซ์หรือไม่? ตัวอย่างเช่นการบล็อกรหัสโดยใช้mintedสภาพแวดล้อมหรือ URL ใน\url{}? (ฉันไม่แน่ใจว่ามันเกี่ยวข้องกับการตรวจสอบการสะกด แต่ฉันใช้ปลั๊กอินvimtexเพื่อแก้ไขไฟล์ลาเท็กซ์)

5
วิธีค้นหารูปแบบในขอบเขตไวยากรณ์ที่แน่นอน?
ฉันใช้เสียงเรียกเข้าเพื่อแก้ไขเอกสารลาเท็กซ์ บ่อยครั้งที่ฉันต้องการเปลี่ยนชื่อของตัวแปรเป็นอย่างอื่น อย่างไรก็ตามมันเป็นเรื่องน่ารำคาญเล็กน้อยที่ต้องลุยผ่านการจับคู่ที่ไม่เกี่ยวข้องเมื่อฉันค้นหาชื่อตัวแปร ฉันต้องการค้นหาเฉพาะใน "โซนคณิตศาสตร์" ตามที่กำหนดไว้ในไฟล์ไวยากรณ์ของ tex มีวิธีง่าย ๆ ในการ จำกัด การค้นหาไปยังขอบเขตไวยากรณ์เฉพาะหรือไม่?
10 search 

1
ลบบรรทัดที่ตรงกับรูปแบบจากบรรทัดที่กำหนดไปยังจุดสิ้นสุดของไฟล์
หากฉันมีไฟล์ที่มีความคิดเห็นจำนวนมากอยู่ในนั้นและฉันต้องการลบความคิดเห็นทั้งหมดจากคำพูดบรรทัดที่ 3 ถึงท้ายไฟล์วิธีที่ดีที่สุดในการทำคืออะไร ฉันติดอยู่เนื่องจากสิ่งที่ฉันพยายามครั้งแรกดูเหมือนจะไม่ทำสิ่งที่ฉันต้องการ: :3,$/^#/d แทนที่จะมองหารูปแบบและการลบบรรทัดด้วยในช่วงจาก 3 ถึงจุดสิ้นสุดของไฟล์มันจะลบบรรทัดทั้งหมดจาก 3 ไปจนถึงบรรทัดที่ตรงกับรูปแบบแล้วหยุด ดังนั้นฉันจะใช้คำสั่ง ex กับช่วงของเส้นได้อย่างไร ในกรณีนี้มันจะไปที่จุดสิ้นสุดของไฟล์ แต่มันจะแตกต่างกันหรือไม่ถ้าฉันจะทำเครื่องหมายหรือระหว่างบรรทัดที่ 10 และ 20 หรือช่วงอื่น ๆ
10 ex-mode 


1
ทำไมไฮไลท์ที่กำหนดเองใน vimrc ของฉันถูกลบหรือรีเซ็ตเป็นค่าเริ่มต้น
ฉันต้องการเน้น (เป็นส่วนหนึ่ง) ของสถานะของฉันด้วย%1*เช่น: set statusline=%1*%f%0* highlight User1 ctermbg=0 ctermfg=10 cterm=bold อย่างไรก็ตามสิ่งนี้จะปรากฏเป็น "ว่าง" เสมอ (สีเทอร์มินัลเริ่มต้น): ถ้าฉันพิมพ์:highlight User1มันจะแสดงUser1 xxx clearedและถ้าฉันพิมพ์:highlight User1 ctermbg=0 ctermfg=10 cterm=boldในหน้าต่างคำสั่งดูเหมือนว่าจะทำงาน ฉันจะใส่สิ่งนี้ลงใน.vimrcไฟล์ของฉันได้อย่างไร ไฟล์ vimrc เต็มของฉันที่ฉันใช้สำหรับทดสอบ: set nocompatible set background=light colorscheme default set laststatus=2 set statusline=%1*%f%0* highlight User1 ctermbg=0 ctermfg=10 cterm=bold

3
ใส่หมายเลขที่เพิ่มขึ้นในแต่ละบรรทัดในการเลือกหรือการจับคู่
ฉันมีปัญหาฉันสามารถคิดถึงวิธีการทั่วไปสองวิธีในการแก้ปัญหา แต่ฉันไม่ทราบวิธีที่เฉพาะเจาะจงสำหรับทั้งสองวิธี ... Level 1: cũng also Level 1: và and Level 1: như like; such as Level 2: các plural marker Level 2: của belonging to ... สำหรับแต่ละบรรทัดที่ขึ้นต้นด้วย "ระดับ n" ฉันต้องการใส่ตัวเลขโดยเริ่มต้นด้วย "01" เพื่อความง่ายเรามาเติมตัวเลขกัน วิธีที่ 1: เลือกทุกบรรทัดด้วยตนเองในระดับเดียวกัน วิงวอนขอใช้เวทมนตร์ฉันจะเรียนรู้เร็ว ๆ นี้ วิธีที่ 2: เขียนการค้นหาและแทนที่ที่ตรงกับทุกบรรทัดด้วยระดับที่กำหนดซึ่งในแต่ละการแข่งขันรวมถึงตัวเลขในข้อความแทนที่ซึ่งเพิ่มขึ้นทีละหนึ่งด้วยการแข่งขันแต่ละ ฉันได้พบคำถามที่คล้ายกันใน StackOverflowหรือไซต์ Vim อื่น ๆ แต่ดูเหมือนว่าจะมีปัญหาอย่างใดอย่างหนึ่งต่อไปนี้: เป็นเรื่องเกี่ยวกับการแทรกหมายเลขบรรทัดปัจจุบันแทนที่จะเป็นหมายเลขที่กำหนดเอง …
10 macro  replace 

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

3
จะเขียน fold-expr ได้อย่างไร?
ฉันได้อ่านหน้าความช่วยเหลือเกี่ยวกับ fold-expr ( :h fold-expr) แล้ว แต่ไม่ได้อธิบายว่าไวยากรณ์ที่ใช้ในนิพจน์คืออะไร มีสี่ตัวอย่าง: :set foldexpr=getline(v:lnum)[0]==\"\\t\" :set foldexpr=MyFoldLevel(v:lnum) :set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1 :set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1 ฉันเข้าใจว่าv:lnumเป็นสายที่ต้องการระดับการเยื้องและการแสดงออกที่สองนั้นเป็นการเรียกใช้ฟังก์ชัน สิ่งที่เกี่ยวกับการแสดงออก 1,3 และ 4 ใครช่วยอธิบายให้ฉันฟังหน่อยได้ไหม?
10 folding 

1
ใช้คำสั่งโหมดปกติเพื่อจับคู่ regex
ฉันใช้นิพจน์ทั่วไปต่อไปนี้เพื่อจับคู่สตริงเอกสารภายใต้นิยามฟังก์ชัน Clojure: \vdefn.*\n\s*\zs"([^"]|\n)*" มีวิธีเรียกใช้gqคำสั่งโหมดปกติ(บรรทัดรูปแบบ) ในทุกการแข่งขันของรูปแบบนี้ในไฟล์ที่กำหนดหรือไม่?

2
วิธีเขียนบัฟเฟอร์ทั้งหมดไปยังเอาต์พุตมาตรฐานจากบรรทัดคำสั่ง?
ฉันต้องการเขียนบัฟเฟอร์ทั้งหมดลงในเอาต์พุตมาตรฐาน ( /dev/stdout) แทนไฟล์และคำสั่งต่อไปนี้ทำงานตามที่คาดไว้ในขณะที่แก้ไขไฟล์: :w >> /dev/stdout คำแนะนำ: กดControl+ Lเพื่อรีเฟรชหน้าจอ แต่มันไม่ทำงานอย่างที่คาดไว้เมื่อฉันพยายามทำสิ่งเดียวกันจากบรรทัดคำสั่ง (แบบไม่โต้ตอบ ): $ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!' Vim: Reading from stdin... เช่นเดียวกันกับ:w !tee, :x! /dev/stdout, :%printและที่คล้ายกัน ก่อนที่จะเลิกพูดว่า: [Device] 1L, 17C appended. มีวิธีการบังคับให้ vim เขียนอินพุตมาตรฐานลงในเอาต์พุตมาตรฐานตรงกลางของไพพ์หรือไม่? อาจจะถูกบัฟเฟอร์อย่างใด?

1
เขียนทับบรรทัดปัจจุบันด้วย register?
ฉันมักจะต้องการคัดลอกบรรทัดและแทนที่บรรทัดอื่นด้วยสำเนาที่วาง มีวิธีที่ดีกว่าYในบรรทัดที่มาไปที่บรรทัดที่จะต้องมีการเปลี่ยนและPjdd?

1
ฉันจะรวมพจนานุกรมสองเล่มใน Vim ได้อย่างไร
ฉันมีสอง dicts: :let defaults = {'hello': 'world', 'bye': 'jupiter'} :let override = {'hello': 'mars'} ฉันจะรวมกุญแจเข้าด้วยกันอย่างไรoverrideเพื่อที่ฉันจะได้ลงท้ายด้วยพจน์ใหม่เช่น: {'hello': 'mars', 'bye': 'jupiter'}

1
ทำไม: bd # ลบบัฟเฟอร์ปัจจุบันเมื่อไม่มีบัฟเฟอร์สำรองอยู่?
นี่คือวิธีที่ฉันทำซ้ำพฤติกรรมที่ฉันสังเกต ก่อนอื่นฉันป้อนคำสั่งนี้: echo aaaaa > a vim a ในกลุ่มฉันป้อนคำสั่งเหล่านี้: :ls :e # :echo bufname('#') นี่คือผลลัพธ์ของคำสั่งทั้งสามข้างต้น: :ls 1 %a "a" line 1 :e # E194: No alternate file name to substitute for '#' :echo bufname('#') bufname('#')คำสั่งผลิตออกไม่มี ตอนนี้ฉันป้อนคำสั่งนี้: :bd # บัฟเฟอร์ปัจจุบันจะถูกลบและจะถูกแทนที่ด้วยบัฟเฟอร์ "[ไม่มีชื่อ]": :ls 2 %a "[No Name]" line 1 ผมคาดหวังว่าจะได้รับข้อผิดพลาดในการดำเนินการE194 :bd #เพราะเหตุใดจึงลบบัฟเฟอร์ปัจจุบันแทน …

2
บันทึกการกระทำล่าสุด (.) ในแมโคร
ใช้ Case ฉันอยู่ในโหมดปกติ ฉันไม่ได้คิดอย่างชัดเจนเกี่ยวกับการบันทึกแมโคร แต่ฉันเปลี่ยนคำสั่งเดียว ตอนนี้ฉันสามารถทำซ้ำการกระทำนี้โดยใช้จุด ตอนนี้ฉันรู้ว่ามันเป็นการกระทำที่มีประโยชน์ในการบันทึกในแมโครเพื่อใช้ในภายหลังแทนที่จะพิมพ์คำสั่งทั้งหมดทุกครั้ง ฉันสามารถเข้าร่วมการเปลี่ยนแปลงทั้งหมดที่จำเป็นต้องใช้คำสั่งนี้ในขณะนี้โดยใช้จุดหรือฉันสามารถดำเนินการแก้ไขและใช้คำสั่งนี้ในภายหลังโดยการบันทึกในแมโคร สิ่งหลังคือสิ่งที่ฉันต้องการทำ แต่วิธีที่ง่ายที่สุดที่ฉันสามารถทำได้ไม่ใช่เรื่องง่าย - เลิกทำการเปลี่ยนแปลงเริ่มบันทึกแมโครและพิมพ์คำสั่งอีกครั้งเพื่อทำการเปลี่ยนแปลงที่ต้องการและหยุดการบันทึกแมโคร สิ่งที่ฉันได้พยายามมาแล้ว: การบันทึกจุดในมาโครไม่ทำงานเนื่องจากบันทึกจุดและไม่ใช่การเปลี่ยนแปลงจุดที่ดำเนินการ (ตัวอย่างเช่นสมมติว่าคำสั่งที่เก็บไว้ในจุดคือd5wถ้าคุณเริ่มบันทึกแมโครและดำเนินการผ่านคาดว่ามันจะลบ 5 คำทุกครั้งที่คุณเรียกใช้แมโครจากนั้นจะไม่เกิดขึ้นในครั้งถัดไปที่คุณเรียกใช้ แมโครมันจะทำจุดและไม่ใช่คำสั่งd5wซึ่งหมายความว่าถ้าคุณทำการเปลี่ยนแปลงอื่น ๆ หลังจากบันทึกแมโคร - พูดว่าลบคำ 3 คำที่ใช้d3wและเป็นการเปลี่ยนแปลงครั้งสุดท้ายที่คุณทำแล้วเมื่อคุณเรียกใช้แมโครมันจะลบ 3 คำศัพท์และไม่ใช่ 5 เพราะมันกำลังทำงานอยู่.)

1
ฉันจะแก้ไขการกำหนดค่า Vim ของฉันในขณะที่ทำงานใน Vim ได้อย่างไร?
ฉันยังใหม่กับ Vim และฉันต้องการที่จะสามารถแก้ไขสคริปต์ด้วยการเชื่อมโยงแป้นพิมพ์และการตั้งค่า Vim อื่น ๆ ของฉันในขณะที่ยังคงทำงานใน Vim ตัวอย่างเช่นฉันต้องการset xxให้คำสั่งส่วนใหญ่ทั้งหมดของฉันอยู่ในไฟล์เดียวและมีความสามารถในการอัปเดตไฟล์และนำการตั้งค่าไปใช้ใหม่ในขณะที่ยังอยู่ใน Vim มันเป็นเรื่องของsourceการใช้ไฟล์ในขณะที่ฉันกำลังแก้ไขหรือไม่?
9 vimrc  set 

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