เป็นไปได้หรือไม่ที่จะสร้างคำสั่ง "set" ที่กำหนดเองในไฟล์ rc ของฉันและเรียกพวกมันจาก modeline?


10

ฉันเพิ่งถามคำถามที่ฉันได้เรียนรู้ว่ามันเป็นไปไม่ได้ที่จะผ่านอะไรยกเว้นพารามิเตอร์ไป:setในแบบจำลองเป็นกลุ่ม ฉันเข้าใจถึงความกังวลด้านความปลอดภัย แต่ฉันสงสัยว่าจะไม่มีวิธีแก้ไขปัญหานี้อีกหรือไม่ คำถามล่าสุดเกี่ยวกับ SOเกี่ยวกับการตั้งกระบวนการขนาดใหญ่ของพารามิเตอร์เพื่อให้สอดคล้องกับมาตรฐานการเข้ารหัสมีฉันคิดมันจะเป็นไปได้ที่จะกำหนดเป็น "กลุ่ม" ของสิ่งที่อยู่ในแฟ้ม rc ของฉันที่สามารถเปิดหรือปิดจาก modeline หรือไม่

ยกตัวอย่างโค้ดหลอก แต่มีวิธีสร้างฟังก์ชั่นที่ถูกทริกเกอร์จากพารามิเตอร์ที่ตั้งไว้หรือไม่?

set_function! codestyle()
    if &1 == 'psr-2'
        set ts=4
        set sw=4
    endfi
    if &1 == 'drupal7'
        set ts=2
        set sw=2
        iab D8 Drupal 8
    endif
endset_function

สิ่งนี้สามารถถูกทริกเกอร์โดย modeline เช่น

# vim: codestyle=psr-2

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


สิ่งนี้จะต้องมีการกำหนดตัวเลือกของคุณเองสำหรับset; AFAIK สิ่งนี้ไม่สามารถเกิดขึ้นได้ใน Vim ...
Martin Tournoij

@Carpetsmoker นั่นหมายความว่าคำตอบสำหรับคำถามนี้คือ vimscript ไม่สามารถห่อหุ้มหรือขยายฟังก์ชั่นในตัวได้หรือไม่?
Caleb

คำตอบ:


10

คุณมีทางเลือกน้อย

  1. ข้อแรก: คุณสามารถเขียนตัวถอดรหัส modeline ของคุณเองเช่นปลั๊กอิน นี่เป็นคำตอบที่คล้ายกับที่ฉันให้กับคำถามอื่นของคุณ

    แน่นอนเราไม่สามารถเพิ่มตัวเลือกกลุ่มใหม่ (ที่สามารถตั้งค่าได้:set) แต่เราสามารถเพิ่มตัวแปรใหม่ได้ และเราไม่สามารถใช้โมเดลมาตรฐานเพื่อทำมากกว่าการตั้งค่าตัวเลือกที่เป็นกลุ่ม

  2. ความเป็นไปได้ที่สอง: ให้-modelineสามารถใช้ประโยชน์ผ่านการเรียกกลับคุณลักษณะในการเรียกฟังก์ชั่นหรืออื่น คุณสามารถมีCodeStyle()ฟังก์ชั่นของคุณใน.vimrcปลั๊กอินของคุณหรือ (autoload?) แล้วมีไฟล์ของคุณมี:

    # VIM: let b:codestyle='psr-2' b:ModeLine_CallBack='CodeStyle'
    

    แต่ถ้าความต้องการของคุณแม่นยำและถ้าคุณไม่ต้องการปลั๊กอินเช่นlocal_vimrcให้เขียนตัวถอดรหัสที่เหมือน modeline ของคุณเอง

  3. ที่สามและ IMO, ทางเลือกที่ดีในกรณีที่จะมีการกำหนด filetype ใหม่และชุด'ft'ที่จะ filetype นี้ใน modelines # vim: set ft=php.psr2ด้วย: ด้วยphpการเป็นประเภทไฟล์ทั่วไปทั่วโลก (ฉันไม่แน่ใจเกี่ยวกับไฟล์นี้) และpsr2เป็นประเภทไฟล์พิเศษที่จะสอดคล้องกับรูปแบบการเข้ารหัสของคุณ คุณจะต้องกำหนดสอง ftplugins: ftplugin / psr2.vim และและ ftplugin / drupal7.vim ที่คุณจะโทรไปที่:setlocal(และไม่:set)


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