Vi & Vim

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

2
การบันทึกอัตโนมัติเป็นกลุ่มหรือไม่?
จาก:help swap-file: การอัพเดต swapfile ไฟล์ swap จะได้รับการอัพเดตหลังจากพิมพ์ 200 ตัวอักษรหรือเมื่อคุณไม่ได้พิมพ์อะไรเลยเป็นเวลาสี่วินาที สิ่งนี้จะเกิดขึ้นหากบัฟเฟอร์มีการเปลี่ยนแปลงไม่ใช่เมื่อคุณย้ายไปมาเท่านั้น สาเหตุที่ทำให้ไม่ทันสมัยอยู่ตลอดเวลาก็คือสิ่งนี้จะทำให้การทำงานปกติช้าลงมากเกินไป คุณสามารถเปลี่ยนจำนวน 200 ตัวอักษรด้วยตัวเลือก 'updatecount' คุณสามารถตั้งเวลาด้วยตัวเลือก 'updatetime' เวลาถูกกำหนดเป็นมิลลิวินาที หลังจากเขียนไปยังไฟล์ swap Vim จะซิงค์ไฟล์กับดิสก์ ใช้เวลาพอสมควรโดยเฉพาะในระบบ Unix ที่ไม่ว่าง หากคุณไม่ต้องการสิ่งนี้คุณสามารถตั้งค่าตัวเลือก 'swapsync' เป็นสตริงว่าง ความเสี่ยงในการสูญเสียงานจะยิ่งใหญ่ขึ้น ในระบบที่ไม่ใช่ Unix (MS-DOS, Amiga) ไฟล์ swap จะไม่ถูกเขียนเลย จากนี้ฉันมีคำถามสองสามข้อ: นี่หมายความว่า Vim บันทึกการทำงานของคุณโดยอัตโนมัติเป็นครั้งคราวหรือไม่? "หลังจากเขียนไปยังไฟล์ swap Vim จะซิงค์ไฟล์ไปยังดิสก์" สิ่งนี้หมายความว่า? นี่หมายถึงไฟล์ที่ถูกเขียนลงหน่วยความจำก่อนแล้วจึงไปที่ดิสก์หรือมันเป็นอย่างอื่น? บอกว่าฉันกำลังจดบันทึกในชั้นเรียน: ฉันเขียนได้อย่างรวดเร็วและฉันไม่จำเป็นต้องออกจากโหมดแทรก แต่หลายครั้งฉันเปลี่ยนเป็นปกติเพียงเพื่อบันทึกงานของฉัน ฉันต้องทำสิ่งนี้หรือไม่หรือให้แน่ใจว่างานส่วนใหญ่ของฉันได้รับการบันทึกแม้ว่าฉันจะไม่ออกจากโหมดแทรกหรือไม่
13 save  swap-file  backup 

9
พื้นหลังของ Colorscheme ไม่ถูกต้องในเทอร์มินัล
ฉันนำเข้าชุดสีและแผงพลังงานแสงอาทิตย์ เทอร์มินัลของฉันมีสีและพื้นหลังที่ถูกต้อง gvim มีสีและพื้นหลังที่ถูกต้อง แต่ vim มีพื้นหลังสีไม่ถูกต้อง ข้อความทั้งหมดถูกต้อง แต่พื้นหลังดูเหมือนจะเป็นสีดำบริสุทธิ์ นี่คือ. vimrc ของฉัน: syntax enable if has('gui_running') set background=dark else set background=dark endif :set t_Co=256 let g:solarized_termcolors=256 colorscheme solarized หากใครมีข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่อาจทำให้เกิดสิ่งนี้ฉันจะต้องรับผิดชอบมาก ฉันรัน xubuntu ด้วยเทอร์มินัลเริ่มต้น ฉันควรจะพูดถึงว่าตัวเลือกแสงส่งผลให้พื้นหลังเป็นสีเหลืองสำหรับ Vim

2
ยกหน้าต่างถือแลกเปลี่ยนไฟล์
บางครั้งในขณะที่ทำงานกับหลายโครงการและ / หรืออะไรก็ตามมันทำให้ฉันด้วย (เช่น) อินสแตนซ์ Vim จำนวนมากเปิด - ตามที่เกิดขึ้นฉันเปิดไฟล์ที่เปิดอยู่แล้วที่อื่นทำให้ฉันมีตัวเลือกดังนี้: [O]pen Read-only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort มีบางวิธีในการยกตัวอย่างเช่นใน GUI / terminal ถือไฟล์เปิดหรือไม่ เป็นการดีที่จะนำไฟล์ที่สงสัยไปยังเบื้องหน้า (หากมีหลายบัฟเฟอร์) ณ ตอนนี้ฉันกำลังใช้ bash script ที่ดึง PID ออกจาก swap ให้ตรวจสอบว่า PID นั้นเป็นของ Vim หรือไม่และถ้าใช้wmctrlจะยกหน้าต่างขึ้นมา ขณะนี้ใช้งานได้ดีอย่างน้อยสำหรับ GUI และบน X11 Linux ฉันกำลังถามว่ามีวิธีเนทีฟมากกว่าหรือไม่
13 swap-file  x11  linux 

1
สามารถสร้างขอบเขตของไวยากรณ์กลุ่มเพื่อสัมผัส / ทับซ้อนได้หรือไม่?
เมื่อไม่นานมานี้ฉันตัดสินใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการทำงานของไฟล์ไวยากรณ์ของ vim โดยการสร้างของฉันเอง เป้าหมายของฉันคือการสร้างไฟล์ไวยากรณ์อย่างง่ายที่จะแบ่งไฟล์ออกเป็น 3 ส่วนตามตัวคั่นและรวมไฟล์ไวยากรณ์ที่มีอยู่ล่วงหน้าสำหรับสองในสามส่วนนั้น นี่คือไฟล์ตัวอย่าง: Some text, unstyled ==================== Log (Output of git log) ==================== Diff (Output of diff) เป้าหมายคือนำไปใช้git.vimกับบันทึกและdiff.vimเพียงส่วนต่างไม่รวมสองหัว 1 นี่คือสิ่งที่ไฟล์ไวยากรณ์ของฉันดูเหมือน: if exists("b:current_syntax") finish endif syntax include @gitlog $VIMRUNTIME/syntax/git.vim syntax region GitLog \ start=/^===* Log/ \ end=/^===* Diff/ \ contains=@gitlog syntax include @gitdiff $VIMRUNTIME/syntax/diff.vim syntax region Diff …

3
ฉันจะป้องกันไม่ให้ Vim ปล่อยไฟล์มากเกินไป (เช่น swap, backup, เลิกทำ) ได้อย่างไร?
โดยค่าเริ่มต้นvimออกจากไฟล์ swap ในไดเรกทอรีโครงการของฉันและเมื่อเกิดปัญหามันออกจากไฟล์สำรอง ฉันจะป้องกันสิ่งนี้ได้ไหม หรือฉันต้องการอัปเดต.VCSignoreไฟล์โครงการทั้งหมดของฉัน?

3
ฉันจะเลือกบล็อกของข้อความที่ฉันเพิ่งวางใน Vim ได้อย่างไร
ฉันมักจะต้องย้าย / คัดลอกโค้ดระหว่างไฟล์ต้นฉบับของฉัน หลังจากที่ฉันวางบล็อกข้อความฉันมักจะต้องใช้การดำเนินการบางอย่างกับบล็อกนั้นเช่นการใส่=กลับเข้าไปใหม่ มีวิธีในการเลือกบล็อกข้อความที่ฉันเพิ่งวางโดยไม่ต้องทำเองหรือไม่

1
เสียงเรียกเข้าที่คอมไพล์ด้วย python3 แต่มี ('python') ส่งคืนค่า 0
ฉันเพิ่งทำตามคำแนะนำเหล่านี้เพื่อคอมไพล์ vim ด้วย python 3: https://github.com/Valloric/YouCompleteMe/wiki/Building-Vim-from-source หลังจากการติดตั้งฉันตรวจสอบเพื่อดูว่าฉันมี python3: vim --version | grep "python" ซึ่งส่งคืน: +python3/dyn และ +python/dyn แต่เมื่อฉันเริ่มเป็นกลุ่มและพิมพ์หนึ่งในคำสั่ง followinf ฉันได้รับ0: :echo has('python3/dyn') :echo has('python3') :echo has('python') :echo has('python/dyn') มีใครมีปัญหาที่คล้ายกัน? แก้ไข: เฮ้พวกความคิดเห็นที่เป็นประโยชน์มากมายฉันแค่อยากจะขอบคุณและให้พวกคุณรู้ว่าฉันทำอะไรเพื่อแก้ไขปัญหานี้ ฉันทำตามคำแนะนำอีกครั้งจากลิงก์แรกที่ฉันให้ไว้ แต่คราวนี้ฉันลบ vim.tiny และแทนที่จะพยายามรับ vim เพื่อสนับสนุนทั้ง python2 และ python3 ฉันเพิ่งสร้างด้วยการสนับสนุน python3 สิ่งนี้แก้ไขได้ การพิมพ์ python3 print("works") worksในกลุ่มที่แสดงให้เห็น การพิมพ์ echo has('python3') …

2
ทำไม Vim ตั้งความกว้างของข้อความสูงสุดเป็น 79 แทนที่จะเป็น 80
ฉันสับสนเล็กน้อยเกี่ยวกับค่าเริ่มต้นใน Vim โดยเฉพาะอย่างยิ่งสำหรับgq{motion}มีการกล่าวกันว่า [...] If the 'textwidth' option is 0, the formatted line length is the screen width (with a maximum width of 79). ฉันคิดว่ามันควรมีเหตุผลมากกว่านี้หากตั้งค่าความกว้างสูงสุดไว้ที่80แทน ใครบางคนสามารถสอนฉันเกี่ยวกับเรื่องนี้? ฉันคิดว่าฉันขาดอะไรไป
13 formatting 

1
จุดสิ้นสุดของการเคลื่อนไหวบล็อกหลาม
ฉันต้องการการเคลื่อนไหวที่ย้ายไปยังจุดสิ้นสุด / จุดเริ่มต้นของบล็อกหลามและฉันต้องการการเคลื่อนไหวอีกครั้งเพื่อย้ายไปยังจุดเริ่มต้น / จุดสิ้นสุดของวิธีการ / คลาสก่อนหน้า / ถัดไป / คลาส (ชุดค่าผสมทั้งหมด) ฉันได้ลอง vim-indent-object, python-mode, chapa, vim-python-object และอื่น ๆ ไม่มีพวกมันรองรับจุดสิ้นสุดของบล็อกและไม่มีพวกมันรองรับการเคลื่อนไหวทั้งหมดข้างต้น ผมจำได้ว่ากาลครั้งหนึ่งผมมีปลั๊กอินที่ให้]], [[, ][และ[]การเคลื่อนไหวสำหรับต้น / ท้ายของก่อนหน้า / ถัดวิธีการ / ชั้น แต่ฉันไม่สามารถหาได้ในไดเรกทอรีเสียบของฉัน (สืบค้น "] [" และ "[]" ในไดเรกทอรีที่เสียบของฉันและวิเคราะห์เหตุการณ์ทั้งหมด แต่ไม่พบสิ่งที่กำหนด "] [" หรือ "[]") คุณรู้หรือไม่ว่าปลั๊กอินที่ฉันเคยใช้ คุณรู้หรือไม่ว่าปลั๊กอินใดที่มีฟังก์ชั่นนี้

3
จะค้นหาคีย์ที่ถูกแมปไปได้อย่างไร?
ฉันรู้ว่าการรัน:mapคำสั่งที่ไม่มีอาร์กิวเมนต์ควรให้รายการของการจับคู่ที่ผู้ใช้กำหนดเอง แต่ตัวอย่างเช่นเมื่อฉันกด Ctrl-W Ctrl-I จะเกิดอะไรขึ้น ไม่ปรากฏใน:mapคำสั่ง ฉันจะรู้ได้อย่างไรว่ากุญแจทำอะไร?

1
ไม่สามารถแมปปุ่ม 'umlaut' ภาษาเยอรมันใน. vimrc
ฉันกำลังพยายามหาวิธีทำแผนที่แป้น umlaut ของเยอรมัน (Ä, ä, Ö, ö, Ü, ü) ทางลัดง่ายๆเช่นนี้จะไม่ทำงาน: inoremap <c-ö> <Esc> ctrl+öไม่มีอะไรเกิดขึ้นเมื่อกด ไม่มีใครรู้วิธีแก้ปัญหานี้?

2
การกลับคำสั่ง 'ไปที่ถัดไป' คืออะไร
ถ้าผมต้องการที่จะไปถัดไปในบรรทัดแล้วฉันพิมพ์, t,ถ้าฉันต้องการที่จะไปก่อนหน้านี้,ฉันสามารถใช้/nป้อนNแต่นี้เป็นซอเล็ก ๆ น้อย ๆ วิธีที่ดีที่สุดในการย้อนกลับtคำสั่งและไปยังก่อนหน้า,คืออะไร
13 search 

2
อะไรคือความแตกต่างระหว่างการทำงาน: nohlsearch และ: set nohlsearch?
ผมสังเกตเห็นว่าเมื่อฉันใช้ว่ามันไม่ได้ทำจริงเป็นสิ่งเดียวกับ:nohlsearch:set nohlsearch โดยเฉพาะอย่างยิ่งการhlsearchตั้งค่าไม่ได้ปิดจริง (ซึ่งเป็นสิ่งที่:set hlsearch) สำเร็จ เพื่อแสดงให้เห็นถึงสิ่งที่ฉันหมายถึง: :set hlsearch :nohlsearch :echo &hlsearch ภาพนี้1( hlsearch ยังคงตั้งค่า! ) :set hlsearch :set nohlsearch :echo &hlsearch พิมพ์นี้0เพราะเราปิด hlsearch โดยใช้วิธีมาตรฐานเพื่อปิดการตั้งค่าในกลุ่ม ดังนั้นฉันจึงสงสัยเพราะจะต้องมีเหตุผลที่แท้จริงสำหรับ:nohlsearchคำสั่ง ex เหตุผลที่ผมสนใจก็คือว่าตอนนี้ผมมีความจำเป็นในการเขียนสคริปต์ที่เป็นกลุ่มของฉันในการทดสอบไม่ว่าจะเป็นไฮไลท์ที่มีการใช้งานการค้นหาและตั้งแต่ผมใช้:nohlsearchแทน "ชุด nohlsearch" ในการเขียนสคริปต์อื่น ๆ ของฉันฉันทดสอบเสมอผลตอบแทน&hlsearch 1ดังนั้นฉันสงสัยว่าฉันกำลังเปลี่ยนอะไรโดยไม่ใช้nohlsearchคำสั่ง ex อีกต่อไป
13 search  highlight 

1
การพับตามรูปแบบการค้นหาของ regex
ฉันได้รับไฟล์ข้อความธรรมดาที่มีคอลัมน์ค่าช่องว่างคั่น แบบนี้: AU 3030 .... ... .... AU 3031 .... ... .... AU 3032 .... ... .... AU 3033 .... ... .... IT 48100 ... .. ..... IT 40100 ... .. ..... IT 48123 ... .. ..... UK 3333 ... ... ..... UK 4444 ... ... ..... UK 5555 ... …

2
วิธีการหลีกเลี่ยงสตริงทั้งหมดในคำสั่ง:
มาดูกัน. ฉันมีการgvimทำงานและฉันต้องการเปิดไฟล์ที่เคารพautocmds ( ซึ่งออกกฎ--remote-tab ) ตอนนี้ฉันรู้ว่าฉันสามารถทำได้ (โดยทั่วไปมีการปรับแต่ง): gvim --remote-send ":tabe my_file<CR>" ซึ่งใช้งานได้ แต่ถ้าไฟล์มีช่องว่างหรือตัวอักษรแปลก ๆ ฉันต้องทำดังนี้: gvim --remote-send ":tabe my\\ file<CR>" (double \\เป็นเพราะหนึ่งในนั้นถูกกินโดยเชลล์สิ่งนี้เทียบเท่ากับการพิมพ์ด้วยตนเอง `:tabe my\ file` ในvimและมันใช้งานได้) ตอนนี้ฉันสามารถหาวิธีสร้างสตริงนั้นในเชลล์หรืออะไรก็ได้ แต่ฉันหวังว่าฉันจะ "อ้างคำสั่งทั่วโลก" สตริงในคำสั่ง ": tabe" เช่น gvim --remote-send ":tabe 'my file'<CR>" หรือ gvim --remote-send ":tabe \"my file\"<CR>" --- นี่เทียบเท่ากับการเขียนโดยตรงในบรรทัดคำสั่ง vim :tabe "my file"; …

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