ฉันมีไฟล์ชื่อ.aliases
bash และ zsh ฉันใส่บรรทัดนี้
# vim: set filetype=bash:
แต่ถ้าฉันทำ
: echo &ft
ฉันเข้าใจ conf
ฉันมีไฟล์ชื่อ.aliases
bash และ zsh ฉันใส่บรรทัดนี้
# vim: set filetype=bash:
แต่ถ้าฉันทำ
: echo &ft
ฉันเข้าใจ conf
คำตอบ:
ว่าควรจะทำงาน ฉันลองบรรทัดนั้นเองและใช้งานได้ ฉันอาจเป็นไปได้ว่าตัวเลือก 'แบบจำลอง' ของคุณถูกตั้งค่าเป็น ลองดำเนินการนี้และดูสิ่งที่คุณได้รับ
:verbose set modeline?
ที่จะบอกคุณค่าของตัวเลือก 'modeline' และหากไม่ใช่ค่าเริ่มต้นซึ่งเป็นชุดสุดท้าย
ลีนุกซ์ดิสทริบิวชันบางชุดจะตั้ง 'nomodeline' ใน / etc / vimrc หรือ / usr / share / vim / vimrc เป็นมาตรการรักษาความปลอดภัยแม้ว่าปัญหาความปลอดภัยของ 'modeline' จะได้รับการแก้ไขนาน
modelines
ตัวเลือกนั้นไม่ได้ถูกใช้งานและมันจะไม่เป็นเช่นนั้น นี่เป็นเหมือนข้อบกพร่องด้านความปลอดภัยทั้งหมดที่เกิดขึ้นจากคำสั่งไฟล์ฝังตัวหรือคำสั่งแมโครเพื่อทำงานใน PDF, Word, Excel, & c & c & c
ฉันอธิบายรายการตรวจสอบการดีบักแบบเต็มในคำตอบอื่นนี้
ฉันนิ่งงันกับเอกสารนี้จริงๆเพราะเอกสารไม่จริงทั้งหมด
ปรากฎว่าในรุ่น 8 (และอาจก่อนหน้านี้) คุณไม่สามารถใช้คำset
ในแบบจำลองของคุณ เอกสารอธิบายถึง "รูปแบบที่สอง" ว่าเป็น/* vim: set ai tw=75: */
แต่สิ่งนี้ไม่ทำงาน คุณต้องใช้ "แบบฟอร์มแรก"// vim: ai tw=75
หมายเหตุ: คุณสามารถใช้ตัวแสดงความคิดเห็นอย่างใดอย่างหนึ่งได้ หรือไม่มีเลย
set
งานได้ดีสำหรับฉันในกลุ่ม 8.0 (แม้ว่าไม่ใช่บน 7.4) นอกจากนี้ยังควรสังเกตว่าด้วยรูปแบบที่สอง// vim: ai tw=75
จะไม่มีตัวละครอื่น ๆ ที่ท้ายบรรทัดหรือกลุ่มจะบ่นและเพิกเฉยโมเดลนี้
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 16:44:48) Inklusive der Korrekturen: 1-1689 Extra-Patches: 8.0.0056 Verändert von pkg-vim-maintainers@lists.alioth.debian.org Übersetzt von pkg-vim-maintainers@lists.alioth.debian.org Riesige Version mit GTK2-GNOME GUI.
(เส้นสุดท้ายหมายถึงการแก้ไขโดย ... , รวบรวมโดย ... , รุ่นใหญ่ ... )
set modelines=1
(หรือค่าที่ไม่ใช่ 0) ใน ~ / .vimrc ของฉันทำให้มันทำงานได้สำหรับฉัน
modeline
ไม่ได้ยังตั้ง (ซึ่งมันเป็นโดยเริ่มต้นในกลุ่มยกเว้นกรณีที่คุณกำลังราก)
set nomodeline
ใน/etc/vimrc
เนื่องจากทุกช่องโหว่ที่มี modelines จัดการกลุ่ม
modelines
ที่ไม่เป็นศูนย์ด้วย ความช่วยเหลือบอกว่าค่าเริ่มต้นคือ5
นั่นคือสิ่งที่ฉันตั้งไว้และนั่นก็เป็นเคล็ดลับสำหรับฉัน สหรัฐฯกล่าวว่าIf 'modeline' is on 'modelines' gives the number of lines that is checked for set commands. If 'modeline' is off or 'modelines' is zero no lines are checked.
ใน ~ / .vimrc คุณต้องตั้งค่าต่อไปนี้:
set nocompatible
filetype plugin on
set modeline
การเพิ่มสิ่งต่อไปนี้ให้กับงานของฉัน~/.vimrc
สำหรับฉันในกล่อง Funtoo Linux ของฉัน:
set modeline
ตั้งแต่นี้ดูเหมือนจะเกิดขึ้นในการค้นหา:
ผมมีปัญหาเดียวกัน:
# vim: set filetype=sh:
ไม่ทำงานส่งผลให้ ft = conf เช่นกัน โดยไม่มี modeline ใน ~ / .bash_alias, ft ว่างเปล่าดังนั้นมีอะไรเปลี่ยนแปลง
ในขณะที่
# vim: filetype=sh:
ทำงาน ":" การปรากฏตัวครั้งสุดท้ายดูเหมือนจะไม่เกี่ยวข้อง
ฉันใช้ OSX พร้อมกับ Vim8 เวอร์ชันที่ถูกต้มสำหรับเร็กคอร์ด
มันแปลกเพราะจาก modeline ช่วยทั้งคู่
[text]{white}{vi:|vim:|ex:}[white]{options}
และ
[text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]
ดูเหมือนจะได้รับการสนับสนุน
ผลลัพธ์ของ
verbose set ft?
ด้วย "vim: filetype = sh" คือ
filetype=sh
Last set from modeline
ไม่มี modeline:
filetype=
ด้วย "vim: set filetype = sh"
filetype=conf
Last set from /usr/local/Cellar/vim/8.0.1350/share/vim/vim80/filetype.vim
อาจมีผลข้างเคียงบางอย่างใน conf ของฉัน แต่ไวยากรณ์ modeline ที่เข้ากันไม่ได้เป็นเพียงอันเดียวที่ทำงานได้ตามที่คาดไว้สำหรับฉัน
/usr/share/vim/vim80/debian.vim
จากvim-common
บนDistros ที่ใช้ Debianจะปิดใช้งานmodeline
ตามค่าเริ่มต้น
" modelines have historically been a source of security/resource
" vulnerabilities -- disable by default, even when 'nocompatible' is set
set nomodeline
คุณต้องเปิดใช้งานmodeline
อย่างชัดเจนในไฟล์.vimrc
หรือของคุณ~/.vim/vimrc
set modeline
ส่วนใหญ่อาจเป็นเพราะ modeline ถูกปิดการใช้งาน
ฉันทำงานโดย:
ในกรณีนี้เริ่มต้นที่อนุญาตพิเศษ filetype
ได้แก่