การตั้งค่า vim filetype ด้วย modeline ไม่ทำงานอย่างที่คาดไว้


12

ตามคำตอบที่ได้รับการยอมรับสำหรับคำถามนี้ฉันพยายามใช้ modelines in vim เพื่อบังคับให้มีการตรวจจับประเภทไฟล์ในบางไฟล์

ตัวอย่างเช่นที่ด้านบนของไฟล์ชื่อgitconfig(หมายเหตุไม่มีผู้นำ.) ฉันมีบรรทัดต่อไปนี้:

# vim: set filetype=gitconfig : 

modelineเปิดใช้งานในระบบของฉัน อย่างไรก็ตามเมื่อฉันเปิดไฟล์เป็นกลุ่มset filetype?จะให้ผลตอบแทนconfมากกว่าที่คาดgitconfigไว้

เป็นไปได้ไหมว่าส่วนอื่น ๆ ของการกำหนดค่า vim ของฉัน (เช่น filetype.vim) ทำให้เกิดพฤติกรรมแปลก ๆ นี้?

แก้ไขเพื่อตอบสนองต่อความคิดเห็น:

set compatible? ผลตอบแทน nocompatible

set modeline? ผลตอบแทน modeline

verbose set filetype? ผลตอบแทน:

filetype=conf
      Last set from /usr/share/vim/vim73/filetype.vim

ฉันไม่เข้าใจว่าทำไมปลั๊กอินชนิดกว้าง ๆ ของระบบจะแทนที่สิ่งที่ฉันตั้งไว้ในไฟล์เอง

หมายเหตุสุดท้ายสุดท้าย: นี่เป็นเวอร์ชั่น Vim 7.3 ที่จัดส่งมาพร้อมกับ OSX

รุ่นล่าสุดของMacVimทำงานอยู่บนระบบเดียวกันโดยใช้เดียวกัน.vimrcจะทำงานตามที่คาดหวังกับการกลับมาset ft?filetype=gitconfig


ฉันมักจะเห็นตัวเลือกเหล่านั้นตั้งไว้ที่ท้าย (บรรทัดสุดท้าย) ของไฟล์ - อาจเป็นปัญหา ...
rozcietrzewiacz

เพียงเพื่อให้แน่ใจว่าคุณไม่ตรวจสอบว่าset modeline?ไม่พิมพ์nomodeline?
rozcietrzewiacz

ฉันพบสาเหตุที่พบบ่อยที่สุดสำหรับ modeline ที่ไม่ทำงานcompatibleคือตั้งค่าไว้ นั่นก็คุ้มค่าที่จะตรวจสอบเช่นกัน
Edd Steel

ดูคำถามที่ปรับปรุงแล้วสำหรับคำตอบ
Murali Suriar

คำตอบ:


21

ดังนั้นหลังจากการขุดบางครั้งมันก็เกิดขึ้นว่าระบบที่vimrcจัดส่งมาพร้อมกับ OSX ตั้งค่าmodelinesตัวแปร (จดบันทึกท้ายของ) เป็น 0 ตัวแปรนี้ควบคุมจำนวนบรรทัดในไฟล์ที่ตรวจสอบคำสั่งชุด การกำหนด modelines ให้เป็นค่าที่ไม่เป็นศูนย์ในการ.vimrcแก้ไขปัญหาของฉัน

ผลลัพธ์เต็มรูปแบบสำหรับสิ่งที่อยากรู้: ผลลัพธ์ของการvim --versionแจ้งเตือนให้ฉันตรวจสอบระบบ vimrc:

% vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jun 24 2011 20:00:09)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
...
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -D_FORTIFY_SOURCE=0 -Iproto -DHAVE_CONFIG_H -arch i386 -arch x86_64 -g -Os -pipe
Linking: gcc -arch i386 -arch x86_64 -o vim -lncurses

ดูระบบ vimrc:

% cat /usr/share/vim/vimrc 
" Configuration file for vim
set modelines=0         " CVE-2007-2438
...

นำฉันไปสู่modelinesตัวแปร ดูเหมือนว่า MacVim จะไม่ส่งไฟล์ระบบนี้ (อาจมองหาระบบ GVIMRC แทนหรือ:help startupไม่ชัดเจน)

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jul 27 2011 19:46:24)
MacOS X (unix) version
Included patches: 1-260
Compiled by XXXXX
Huge version with MacVim GUI.  Features included (+) or not (-):
...
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "$VIM/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/Applications/MacVim.app/Contents/Resources/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MACVIM -Wall -Wno-unknown-pragmas -p
ipe  -DMACOS_X_UNIX -no-cpp-precomp  -g -O2 -D_FORTIFY_SOURCE=1
Linking: gcc   -L.         -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -L/usr/local/lib -o V
im -framework Cocoa -framework Carbon      -lncurses  -liconv -framework Cocoa    -fstack-prote
ctor -L/usr/local/lib  -L/System/Library/Perl/5.10/darwin-thread-multi-2level/CORE -lperl -lm -
lutil -lc -framework Python   -framework Ruby

1

เพื่อให้ทำงานบนระบบ macOS ของฉันฉันต้องกำหนดการตั้งค่าสองสามอย่างใน ~ / .vimrc:

modeline
modelines=2

โดยที่ ' modeline ' เปิดใช้งานการตั้งค่าในไฟล์และ ' modelines = # ' กำหนดจำนวนบรรทัดที่ vim / vi จะตรวจสอบคำสั่ง set

เมื่อตั้งค่าพารามิเตอร์เหล่านั้นแล้วฉันสามารถใช้ไวยากรณ์เช่นบรรทัดด้านล่างในไฟล์ของฉันเพื่อแทนที่พารามิเตอร์ชุด

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