modeline không hoạt động trong vim


19

Tôi có một tệp được gọi là .aliasesbash và zsh, tôi đặt dòng này

# vim: set filetype=bash: 

nhưng nếu tôi làm

: echo &ft

tôi có conf


Tôi đã thử mọi thứ ở đây và không có gì hiệu quả. Tôi đã sử dụng vim được 18 năm. Đây là lần đầu tiên tôi thất bại trong việc làm cho modeline hoạt động.
Bruno Bronosky

Tìm ra. Trả lời dưới đây. superuser.com/a/1174296/3376
Bruno Bronosky 2/2/2017

Câu trả lời:


28

Cần làm việc. Tôi đã thử dòng đó bản thân mình và nó đã làm việc. Tôi có thể là tùy chọn 'modeline' của bạn đã được đặt thành 'nomodeline'. Hãy thử thực hiện điều này và xem những gì bạn nhận được.

:verbose set modeline?

Điều đó sẽ cho bạn biết giá trị của tùy chọn 'modeline' và nếu không phải là mặc định, nơi nó được đặt lần cuối.

Một số bản phân phối Linux đặt 'nomodeline' trong / etc / vimrc hoặc / usr / share / vim / vimrc làm thước đo bảo mật, mặc dù các vấn đề bảo mật với 'modeline' đã được khắc phục từ lâu.


modeline Tập cuối từ ~ / .vimrc
juanpablo

để bảo mật, tôi thay đổi modeline để thêm cái này vào ~ / .vimrc au BufNewFile, BufRead. * bí danh đặt filetype = sh
juanpablo

Không phải tất cả trong số họ đã được cố định từ lâu. github.com/numirias/security/blob/master/doc/ từ
duckbrain

@duckbrain Về cơ bản không thể đảm bảo rằng tất cả các vấn đề bảo mật đã được khắc phục miễn là có thể bao gồm các hướng dẫn được nhúng để được thực thi bởi mã nhìn vào dữ liệu trong chính dữ liệu. Đây là lý do tại sao tài liệu cho Keith Binto của nvi luôn nói modelinesrằng tùy chọn này không được thực hiện và nó sẽ không bao giờ được. Điều này giống như tất cả các lỗi bảo mật xuất phát từ các lệnh nhúng tệp hoặc hướng dẫn macro để chạy trong PDF, Word, Excel, & c & c & c.
tchrist

14

Tôi mô tả một danh sách kiểm tra gỡ lỗi đầy đủ trong câu trả lời khác này .

Tôi đã thực sự bối rối về điều này bởi vì tài liệu này không hoàn toàn đúng.

Hóa ra trong phiên bản 8 (và có thể sớm hơn) bạn không thể sử dụng từ này settrong modeline của mình. Các tài liệu mô tả "hình thức thứ hai" là /* vim: set ai tw=75: */nhưng điều này không hoạt động. Bạn phải sử dụng "mẫu đầu tiên"// vim: ai tw=75

Lưu ý: Bạn có thể sử dụng một trong hai loại chỉ số nhận xét đó. Hoặc không có gì cả.


Điều này không nhất thiết đúng với tất cả các cài đặt vim. Biểu mẫu với sethoạt động tốt đối với tôi trên vim 8.0 (mặc dù không phải trên 7.4). Cũng đáng lưu ý rằng với hình thức thứ hai // vim: ai tw=75, không thể có bất kỳ ký tự nào khác ở cuối dòng, hoặc vim sẽ phàn nàn và bỏ qua mô hình.
Josh

Điều này chắc chắn phải được báo cáo là một lỗi (hoặc là tài liệu lỗi thời). Tôi đã sao chép 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. (Các dòng cuối cùng có nghĩa được sửa đổi bởi ... , được biên soạn bởi ... , phiên bản lớn ... ).
LittleByBlue

Tôi đã cố gắng giải quyết nó trong danh sách gửi thư. Họ không đồng ý.
Bruno Bronosky

@BrunoBronosky bạn có liên kết đến chuỗi thư không? Muốn đọc lý luận của họ.
Graywolf

Đây là một liên kết đến các chủ đề. Groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJ Tôi thực sự không dành thời gian để hiểu lý do của họ.
Bruno Bronosky

11

set modelines=1 (hoặc bất kỳ giá trị khác 0 nào) trong ~ / .vimrc của tôi đã làm cho nó hoạt động với tôi.


5
Điều này không có hiệu lực nếu modelinekhông được đặt (theo mặc định trong Vim trừ khi bạn root)
kynan

Gentoo có một hệ thống rộng khắp set nomodelinetrong /etc/vimrcdo cho tất cả các lỗ hổng với modelines xử lý trong vim.
MattBianco

Trong trường hợp của tôi, tôi cũng phải đặt modelinesthành một giá trị khác không. Sự giúp đỡ nói mặc định là 5, vì vậy đó là những gì tôi đặt ra và đó là mẹo cho tôi. Các tiểu bang rằng,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.
Ben

9

trong ~ / .vimrc bạn cần đặt như sau:

set nocompatible 
filetype plugin on
set modeline 

Những dòng này hoạt động trong Debian 9. Cảm ơn bạn!
caligari

7

Chỉ thêm những thứ sau đây vào ~/.vimrccông việc của tôi cho tôi trên hộp Funtoo Linux của tôi:

set modeline

Không hoạt động trong mac!
shuva

1

Vì điều này dường như xuất hiện trong các tìm kiếm:

Tôi đã từng gặp vấn đề tương tự:

# vim: set filetype=sh:

không hoạt động, kết quả là ft = conf là tốt. không có modeline trong ~ / .bash_alias của tôi, ft trống, nên có gì đó thay đổi.

trong khi

# vim: filetype=sh:

đã làm việc. sự hiện diện ":" cuối cùng dường như không liên quan.

Tôi đang dùng OSX với phiên bản ủ Vim8, để ghi lại.

Thật kỳ lạ vì từ người mẫu giúp cả hai

[text]{white}{vi:|vim:|ex:}[white]{options}

[text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]

dường như được hỗ trợ

Đầu ra của

verbose set ft?

với "vim: filetype = sh" là

filetype=sh
      Last set from modeline

không có mô hình:

filetype=

với "vim: set filetype = sh"

filetype=conf
     Last set from /usr/local/Cellar/vim/8.0.1350/share/vim/vim80/filetype.vim

Có thể có một tác dụng phụ ở đâu đó trong conf của tôi, nhưng cú pháp modeline không tương thích là cách duy nhất hoạt động như mong đợi đối với tôi.


1

/usr/share/vim/vim80/debian.vimtừ vim-commontrên distro dựa trên Debian vô hiệu hóa modelinetheo mặc định.

" modelines have historically been a source of security/resource
" vulnerabilities -- disable by default, even when 'nocompatible' is set
set nomodeline

Bạn phải kích hoạt modelinerõ ràng trong .vimrchoặc ~/.vim/vimrctập tin của bạn .

set modeline

0

Rất có thể đó là do modeline bị vô hiệu hóa.

Tôi làm việc xung quanh bằng cách:

  1. giữ cho nó bị vô hiệu hóa nói chung để tránh bất kỳ vấn đề bảo mật.
  2. Cài đặt plugin securemodelines .
  3. Danh sách trắng chỉ các mô hình tôi sử dụng.

Trong trường hợp này, các lệnh trong danh sách trắng mặc định bao gồm filetype.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.