คำถามติดแท็ก vimscript

ภาษาสคริปต์ฝังอยู่ใน Vim สามารถใช้ปรับแต่ง Vim ให้เหมาะกับความต้องการของคุณและสร้างปลั๊กอินได้ เรียกอีกอย่างว่า VimL

3
ทำไมกลุ่มอนุญาตให้หารจำนวนเต็มด้วยศูนย์?
ฉันเพิ่งค้นพบว่าเป็นกลุ่มที่เห็นได้ชัดว่าช่วยให้การหารด้วยศูนย์: :let a=42/0 :echo a พิมพ์2147483647(ซึ่งเป็นค่าของa) เอกสารนี้มีอยู่ที่ใดที่หนึ่งและทำไมกลุ่มอนุญาตให้หารด้วยศูนย์?

2
Vimscript มีชื่อทางการหรือไม่?
ชื่อภาษาบางครั้งเรียกว่า Vimscript เป็นหัวข้อถกเถียง บางแห่งใช้ Viml (หรือเป็น VimL?), Vimscript อื่น ๆ มันมีชื่ออย่างเป็นทางการและถ้ามันเป็นสิ่งที่มันและตั้งแต่เมื่อมันเป็นทางการ? คำถามเกี่ยวกับ VimL กับ Vimscript (อายุประมาณ 5 ปี) โพสต์ล่าสุดที่กล่าวถึงว่ามีชื่อเป็นทางการ การวิ่งของ:helpgrep \cviml\>พาเราไปที่syntax.txt: g:vimsyn_noerror Not all error highlighting that syntax/vim.vim does may be correct; VimL is a difficult language to highlight correctly. และversion7.txt: Added special python-vars objects also available for python-buffer and …

4
ผสานบล็อกด้วยเส้นแทรก
มีวิธีเฉพาะในการรวมสองบล็อกข้อความโดย interleaving บรรทัดเช่นผ่านจากนี้ a1 a2 a3 a4 b1 b2 b3 b4 เพื่อที่: a1 b1 a2 b2 a3 b3 a4 b4 ในคำสั่งไม่กี่? แก้ไข : ฉันชอบโซลูชันของ Sato Katsuraนี่คือวิธีที่ฉันใช้งาน: function! Interleave() " retrieve last selected area position and size let start = line(".") execute "normal! gvo\<esc>" let end = line(".") let [start, end] …

2
ฉันจะตรวจสอบค่าของตัวเลือก Vim ใน Vimscript ได้อย่างไร
ใน Vimscript ฉันจะตรวจสอบค่าปัจจุบันของตัวเลือก Vim ได้อย่างไร ในการทำอย่างละเอียดฉันต้องการให้คำสั่งเปลี่ยนจากโหมด Full-GUI ( guioptions=+tM) เป็นโหมด Hacker ( guioptions=-tM) อย่างไรก็ตามฉันไม่สามารถหาวิธีแยก:set guioptions?ค่าได้

1
เป็นไปได้ที่จะได้รับสายที่ตรงกันหลังจากโทร: ค้นหา ()
ในฟังก์ชั่น vimscript ฉันต้องกำหนดสตริงที่จับคู่ให้กับตัวแปรl:matchedหลังจากการโทรsearch()และฉันสงสัยว่ามีวิธีที่สั้นกว่าสิ่งที่ฉันกำลังทำอยู่: let l:pattern = '\v^Foo: \zs.*' let l:line = search(l:pattern) let l:line_text = getline(l:line) let l:matched = matchstr(l:line, l:pattern) เป็นการดีที่ฉันต้องการบางสิ่งบางอย่าง let l:matched = search_text(l:pattern) withouth getline()หันไป มีฟังก์ชั่นที่เป็นกลุ่มที่ฉันดูเหมือนไม่สามารถหาได้หรือไม่?
14 vimscript  search 

2
เพิ่มการปิด "หรือ" โดยอัตโนมัติเมื่อแทรกเข้าไป แต่เมื่อเคอร์เซอร์ไม่ได้อยู่ในสตริงแล้ว
ผมได้กำหนดไว้ในแมปของฉันที่จะใส่วงเล็บใกล้ชิดและการจัดฟันโดยอัตโนมัติเมื่อฉันใส่คนที่เปิดด้วยvimrcinoremap ( ()<esc>i ฉันต้องการทำแบบเดียวกันกับ"และ'แต่เฉพาะเมื่อเคอร์เซอร์ไม่อยู่ในสตริง - เนื่องจากภายในสตริง'นั้นอาจเป็นเครื่องหมายอะโพสโทรฟีแทนที่จะเป็นตัวคั่นสตริง ฉันจะทำสิ่งนี้ได้อย่างไร

2
ฉันจะสร้างเอกสาร Vim ได้จาก Markdown notes หรือความคิดเห็นแบบอินไลน์หรือมีวิธีที่ดีกว่าในการเพิ่มเอกสาร?
นี้เป็นชนิดของคำถามที่สองในหนึ่ง เมื่อเร็ว ๆ นี้ฉันใช้เวลาเรียนรู้ vimscript ในเชิงลึกเรียนรู้การทำงานภายในของ vim และทำตามขั้นตอนแรกของฉันในการเขียนปลั๊กอิน vim ในระหว่างกระบวนการนี้ฉันได้เก็บบันทึกย่อไว้ในไฟล์มาร์กอัปแต่ละไฟล์และเพิ่มความคิดเห็น 'เอกสารประกอบ' แบบอินไลน์ลงในไฟล์ vimscript ในที่สุดฉันรู้สึกว่าฉันได้รับรหัสที่คุ้มค่าในการแบ่งปันและต้องการเริ่มเพิ่มเอกสารจริง ฉันยังไม่ได้เขียนไฟล์ helpdoc ของฉันเองดังนั้นฉันยังคงหาวิธีการนั้น ไม่มีประสบการณ์หรือความเข้าใจที่ดีเกี่ยวกับเวิร์กโฟลว์นี้มีสองงานที่ฉันพยายามคิดออก: การสร้างไฟล์ helpdoc จากไฟล์ 'notes' ของ markdown ของฉันบน vim / vimscript ดังนั้นฉันสามารถอ่าน / อ้างอิงได้อย่างรวดเร็วและง่ายดายจาก vim เมื่อใดก็ได้ การแยกเอกสารอินไลน์จากไฟล์ vimscript ของฉัน (คล้ายกับวิธีshoccoทำงานสำหรับเชลล์สคริปต์) เพื่อสร้าง helpdoc ที่เกี่ยวข้องสำหรับ vimscripts ข้อเสนอแนะหรือคำแนะนำใด ๆ เกี่ยวกับความคิด ( นี่เป็นความคิดที่ไม่ดีเพราะ ... ความคิดที่ดีกว่าคือ ... ) …

2
cpo & vim เป็นไวยากรณ์พิเศษหรือไม่
ในสคริปต์มันเป็นประเพณีที่จะทำสิ่งที่ชอบ: let s:save_cpo = &cpo set cpo&vim ... script ... let &cpo = s:save_cpo เพื่อให้แน่ใจว่าโหมดที่เข้ากันไม่ได้สำหรับสคริปต์ คือ: set cpo&vim การจัดเรียงบางส่วนของไวยากรณ์พิเศษในขณะที่foo & bar? หรือว่ามันเป็นเหมือนคำสั่งทริกเกอร์ไลน์หรืออย่างอื่นมากกว่านี้?
14 vimscript 

4
วิธีการย้อนกลับทุก 4 บรรทัด?
ก่อนอื่นเลยนี่เป็นโพสต์แรกของฉันที่นี่ฉันอยากจะบอกว่าฉันได้พบว่า VIM เป็นเครื่องมือที่ยอดเยี่ยมและฟอรัมที่นี่จะเป็นประโยชน์อย่างมากในการค้นหาคำตอบของคำถาม ความช่วยเหลือที่ทรงคุณค่า ฉันยังใหม่กับ VIM ดังนั้นทุกสิ่งที่ฉันเรียนรู้มาจากที่นี่ คำถามของฉันคือฉันรู้วิธีย้อนกลับบรรทัดทั้งหมดในไฟล์ (: g / ^ / m0 ท่ามกลางวิธีอื่น ๆ ) แต่มีวิธีย้อนกลับทุก 4 บรรทัดในไฟล์ดังนั้น line1 line2 line3 line4 line5 line6 line7 line8 ... กลายเป็น line4 line3 line2 line1 line8 line7 line6 line5 ... คุณสามารถสมมติได้ว่าจะมีหลายบรรทัดใน 4 บรรทัดที่แน่นอนเสมอ
13 vimscript 

1
วิธีการใช้ตัวแปรในการแสดงออกของคำสั่ง 'ปกติ'?
เราจะใช้ตัวแปรอย่างไรเมื่อเรียกใช้บางสิ่งผ่านnormal!vimscript ตัวอย่าง: function! MyFunction(someArg) normal! (a:someArg)l endfunction สิ่งนี้ควรเลื่อนsomeArgขั้นตอนเคอร์เซอร์ไปทางขวา

2
วิธีการคืนค่าตำแหน่งของเคอร์เซอร์หลังจากรันคำสั่งปกติ?
ฉันพยายามโค้ดฟังก์ชันที่แทนที่อักขระในคอลัมน์ที่หกของบรรทัดปัจจุบันของฉันด้วยสัญลักษณ์ดอลลาร์ ( $) แต่ฉันต้องการเคอร์เซอร์ของฉันอยู่ในตำแหน่งเดิมก่อนเรียกใช้ฟังก์ชัน ดังนั้นฉันจึงพยายามจัดเก็บคอลัมน์ปัจจุบันดำเนินการเปลี่ยนแปลงของฉันแล้วกลับมาพร้อมกับฟังก์ชั่นต่อไปนี้: function! DollarSplit() let col_number=col(".") "stores the current column number of the cursor normal! 6|r$ " replaces the 6th caracter in line with a $ execute col_number."|" endfunction ฉันอาจจะเข้าใจผิดเกี่ยวกับexecuteคำสั่ง ... หรือบางทีฉันควรสร้างสตริงที่มีคำสั่งที่ฉันต้องการจะดำเนินการ?

2
วิธีรับค่าไบต์ปัจจุบันในไฟล์ทั้งหมด
ฉันเห็นว่าคุณสามารถแสดงออฟเซตไบต์ปัจจุบันในสถานะการใช้%oงาน แต่ฉันไม่พบฟังก์ชันหรือคำสั่งที่ทำเช่นเดียวกัน มีวิธีการรับไบต์ปัจจุบันชดเชยอย่างจริงจัง?


4
คำสั่งเพื่อวนซ้ำคำแนะนำการสะกดคำ
ฉันแมปzzไป1z=ซึ่งเป็นที่ดีที่สุดของเวลา แต่ทุกขณะนี้แล้วข้อเสนอแนะครั้งแรกไม่ได้เป็นหนึ่งที่เหมาะสม ดังนั้นฉันต้องการที่จะทำซ้ำzz(หรือ.) ซ้ำเพื่อหลีกเลี่ยงข้อเสนอแนะอื่น ๆ วินาทีzzในคำเดียวกันจากนั้นก็จะได้ผลเหมือนu2z=กันข้อที่สามzzก็ใช้ได้เหมือนu3z=กัน ความคิดใด ๆ เกี่ยวกับวิธีการทำเช่นนั้น? แก้ไข: จากคำตอบที่ยอดเยี่ยมของ @ nobe4 ฉันสามารถทำสิ่งที่ฉันต้องการได้ แต่ฉันจะทิ้งไว้ที่นี่ซักพักในกรณีที่มีใครมีการปรับปรุงหรือคำแนะนำ: let s:spell_position = [] let s:spell_count = 0 let s:spell_word = "" function! LoopSpell() if s:spell_position != getpos('.') || \ (s:spell_count > 0 && s:spell_word !~ expand("<cword>")) let s:spell_count = 0 let s:spell_position = getpos('.') …

3
แทนด้วย vimscript บริสุทธิ์ (ไม่มี `: s`)
ฉันมีดังต่อไปนี้ใน vimrc ของฉัน: func! AddSpaceBeforeEqual() s/\([a-z)_0-9"'\[\]]\)=/\1 =/ge endfunc ฉันใช้vintเพื่อกำจัด vimrc ของฉันและได้รับคำเตือนต่อไปนี้: ProhibitCommandWithUnintendedSideEffect หลีกเลี่ยงคำสั่งที่มีผลข้างเคียงที่ไม่ได้ตั้งใจ หลีกเลี่ยงการใช้: [ubstitute] ในขณะที่เลื่อนเคอร์เซอร์และพิมพ์ข้อความผิดพลาด ชอบฟังก์ชั่น (เช่นการค้นหา ()) ที่เหมาะสมกับสคริปต์ สำหรับคำสั่ง vim จำนวนมากฟังก์ชั่นมีอยู่ที่ทำสิ่งเดียวกันโดยมีผลข้างเคียงน้อย โปรดดู: ฟังก์ชั่นช่วยเหลือ () สำหรับรายการฟังก์ชั่นในตัว คู่มือสไตล์ Google Vimscript อย่างไรก็ตามฉันไม่คิดว่าพวกเขาเป็นวิธีการทดแทนโดยไม่ต้องใช้:sคำสั่ง ตัวอย่างเช่นsearch()ฟังก์ชันให้บรรทัดที่จับคู่รูปแบบ แต่ไม่มีวิธีการทดแทน substitute()ฟังก์ชั่นดำเนินการในสตริงและไม่ทดแทนในไฟล์ทั้งหมด ฉันควรใช้วิธีการทดแทนด้วยตัวเองหรือพวกเขาเป็นวิธีที่ชาญฉลาดในการเขียนฟังก์ชั่นของฉันใหม่?

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