modeline ไม่ทำงานในกลุ่ม


19

ฉันมีไฟล์ชื่อ.aliasesbash และ zsh ฉันใส่บรรทัดนี้

# vim: set filetype=bash: 

แต่ถ้าฉันทำ

: echo &ft

ฉันเข้าใจ conf


ฉันลองทุกอย่างที่นี่และไม่มีอะไรทำงาน ฉันใช้เสียงเรียกเข้ามา 18 ปีแล้ว นี่เป็นครั้งแรกที่ฉันไม่สามารถทำงานนางแบบได้
Bruno Bronosky

คิดออก ตอบด้านล่าง superuser.com/a/1174296/3376
Bruno Bronosky

คำตอบ:


28

ว่าควรจะทำงาน ฉันลองบรรทัดนั้นเองและใช้งานได้ ฉันอาจเป็นไปได้ว่าตัวเลือก 'แบบจำลอง' ของคุณถูกตั้งค่าเป็น ลองดำเนินการนี้และดูสิ่งที่คุณได้รับ

:verbose set modeline?

ที่จะบอกคุณค่าของตัวเลือก 'modeline' และหากไม่ใช่ค่าเริ่มต้นซึ่งเป็นชุดสุดท้าย

ลีนุกซ์ดิสทริบิวชันบางชุดจะตั้ง 'nomodeline' ใน / etc / vimrc หรือ / usr / share / vim / vimrc เป็นมาตรการรักษาความปลอดภัยแม้ว่าปัญหาความปลอดภัยของ 'modeline' จะได้รับการแก้ไขนาน


modeline ชุดล่าสุดจาก ~ / .vimrc
juanpablo

เพื่อความปลอดภัยฉันเปลี่ยน modeline เพื่อเพิ่มสิ่งนี้ใน ~ / .vimrc au BufNewFile, BufRead. * aliases set filetype = sh
juanpablo

ไม่ใช่ทุกคนที่ได้รับการแก้ไขมานานแล้ว github.com/numirias/security/blob/master/doc/…
duckbrain

@duckbrain เป็นไปไม่ได้ที่จะรับประกันได้ว่าปัญหาด้านความปลอดภัยทั้งหมดได้รับการแก้ไขแล้วตราบใดที่มีความเป็นไปได้ที่จะรวมคำแนะนำแบบฝังตัวที่จะถูกเรียกใช้งานโดยรหัสที่ดูข้อมูลในตัวข้อมูลเอง นี่คือเหตุผลที่เอกสารสำหรับnvi Keith Bostic ได้กล่าวเสมอว่าmodelinesตัวเลือกนั้นไม่ได้ถูกใช้งานและมันจะไม่เป็นเช่นนั้น นี่เป็นเหมือนข้อบกพร่องด้านความปลอดภัยทั้งหมดที่เกิดขึ้นจากคำสั่งไฟล์ฝังตัวหรือคำสั่งแมโครเพื่อทำงานใน PDF, Word, Excel, & c & c & c
tchrist

14

ฉันอธิบายรายการตรวจสอบการดีบักแบบเต็มในคำตอบอื่นนี้

ฉันนิ่งงันกับเอกสารนี้จริงๆเพราะเอกสารไม่จริงทั้งหมด

ปรากฎว่าในรุ่น 8 (และอาจก่อนหน้านี้) คุณไม่สามารถใช้คำsetในแบบจำลองของคุณ เอกสารอธิบายถึง "รูปแบบที่สอง" ว่าเป็น/* vim: set ai tw=75: */แต่สิ่งนี้ไม่ทำงาน คุณต้องใช้ "แบบฟอร์มแรก"// vim: ai tw=75

หมายเหตุ: คุณสามารถใช้ตัวแสดงความคิดเห็นอย่างใดอย่างหนึ่งได้ หรือไม่มีเลย


สิ่งนี้ไม่จำเป็นต้องเป็นจริงสำหรับการติดตั้งเป็นกลุ่มทั้งหมด แบบฟอร์มที่ใช้setงานได้ดีสำหรับฉันในกลุ่ม 8.0 (แม้ว่าไม่ใช่บน 7.4) นอกจากนี้ยังควรสังเกตว่าด้วยรูปแบบที่สอง// vim: ai tw=75จะไม่มีตัวละครอื่น ๆ ที่ท้ายบรรทัดหรือกลุ่มจะบ่นและเพิกเฉยโมเดลนี้
Josh

ควรรายงานข้อผิดพลาดนี้อย่างแน่นอน (หรือเป็นเอกสารที่ล้าสมัย) ฉันทำซ้ำบน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. (เส้นสุดท้ายหมายถึงการแก้ไขโดย ... , รวบรวมโดย ... , รุ่นใหญ่ ... )
LittleByBlue

ฉันพยายามพูดถึงมันในรายการส่งเมล พวกเขาไม่เห็นด้วย
Bruno Bronosky

@BrunoBronosky คุณมีลิงก์ไปยังเธรดอีเมลหรือไม่ ต้องการอ่านเหตุผลของพวกเขา
graywolf

นี่คือลิงค์ไปยังเธรด groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJฉันไม่ได้ใช้เวลาในการทำความเข้าใจเหตุผลของพวกเขาจริงๆ
Bruno Bronosky

11

set modelines=1 (หรือค่าที่ไม่ใช่ 0) ใน ~ / .vimrc ของฉันทำให้มันทำงานได้สำหรับฉัน


5
นี้จะไม่มีผลถ้าmodelineไม่ได้ยังตั้ง (ซึ่งมันเป็นโดยเริ่มต้นในกลุ่มยกเว้นกรณีที่คุณกำลังราก)
kynan

Gentoo มีทั้งระบบset nomodelineใน/etc/vimrcเนื่องจากทุกช่องโหว่ที่มี modelines จัดการกลุ่ม
MattBianco

ในกรณีของฉันฉันต้องตั้งค่า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.
เบ็น

9

ใน ~ / .vimrc คุณต้องตั้งค่าต่อไปนี้:

set nocompatible 
filetype plugin on
set modeline 

สายเหล่านั้นทำงานใน Debian 9 ขอบคุณ!
Caligari

7

การเพิ่มสิ่งต่อไปนี้ให้กับงานของฉัน~/.vimrcสำหรับฉันในกล่อง Funtoo Linux ของฉัน:

set modeline

ไม่ทำงานใน mac!
shuva

1

ตั้งแต่นี้ดูเหมือนจะเกิดขึ้นในการค้นหา:

ผมมีปัญหาเดียวกัน:

# 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 ที่เข้ากันไม่ได้เป็นเพียงอันเดียวที่ทำงานได้ตามที่คาดไว้สำหรับฉัน


1

/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

0

ส่วนใหญ่อาจเป็นเพราะ modeline ถูกปิดการใช้งาน

ฉันทำงานโดย:

  1. ปิดใช้งานโดยทั่วไปเพื่อหลีกเลี่ยงปัญหาด้านความปลอดภัย
  2. การติดตั้งปลั๊กอิน securemodelines
  3. ยกเว้นโมเดลที่ฉันใช้เท่านั้น

ในกรณีนี้เริ่มต้นที่อนุญาตพิเศษ filetypeได้แก่

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