Saya sudah mencoba semuanya di sini dan tidak ada yang berhasil. Saya telah menggunakan vim selama 18 tahun. Ini adalah pertama kalinya saya gagal membuat modeline bekerja.
Itu seharusnya bekerja. Saya mencoba jalur itu sendiri dan berhasil. Saya bisa jadi pilihan 'modeline' Anda diatur ke 'nomodeline'. Coba jalankan ini dan lihat apa yang Anda dapatkan.
:verbose set modeline?
Itu akan memberi tahu Anda nilai opsi 'modeline' dan jika bukan default, di mana itu ditetapkan terakhir.
Beberapa distribusi Linux menetapkan 'nomodeline' di / etc / vimrc atau / usr / share / vim / vimrc sebagai langkah keamanan, meskipun masalah keamanan dengan 'modeline' telah lama diperbaiki.
@duckbrain Pada dasarnya tidak mungkin untuk menjamin bahwa semua masalah keamanan telah diperbaiki selama masih mungkin untuk memasukkan instruksi yang tertanam untuk dieksekusi oleh kode yang melihat data dalam data itu sendiri. Inilah sebabnya mengapa dokumentasi untuk Keith Bostic's nvi selalu mengatakan modelinesbahwa opsi tersebut tidak diterapkan dan tidak akan pernah ada. Ini seperti semua bug keamanan yang berasal dari perintah yang tertanam file atau instruksi makro untuk dijalankan dalam PDF, Word, Excel, & c & c & c.
Saya benar-benar bingung untuk yang satu ini karena dokumentasi ini tidak sepenuhnya benar.
Ternyata dalam versi 8 (dan mungkin sebelumnya) Anda tidak dapat menggunakan kata setdalam modeline Anda. Dokumentasi menggambarkan "bentuk kedua" sebagai /* vim: set ai tw=75: */tetapi ini tidak bekerja. Anda harus menggunakan "formulir pertama"// vim: ai tw=75
Catatan: Anda dapat menggunakan salah satu dari indikator komentar tersebut. Atau tidak sama sekali.
Ini belum tentu benar untuk semua pemasangan vim. Formulir dengan setberfungsi baik untuk saya pada vim 8.0 (walaupun tidak pada 7.4). Juga perlu dicatat bahwa dengan bentuk kedua // vim: ai tw=75, tidak mungkin ada karakter lain di akhir baris, atau vim akan mengeluh dan mengabaikan modeline.
Josh
Ini harus dilaporkan sebagai bug (atau sebagai dokumentasi yang sudah ketinggalan zaman). Saya mereproduksi pada 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 [email protected] Übersetzt von [email protected] Riesige Version mit GTK2-GNOME GUI. (Baris terakhir berarti dimodifikasi oleh ... , dikompilasi oleh ... , versi besar ... ).
LittleByBlue
Saya mencoba mengatasinya di milis. Mereka tidak setuju.
Bruno Bronosky
@BrunoBronosky apakah Anda memiliki tautan ke utas surat? Ingin membaca alasan mereka.
Ini tidak berpengaruh jika modelinetidak juga disetel (yang secara default di Vim kecuali Anda root)
kynan
Gentoo memiliki sistem-lebar set nomodelinedi /etc/vimrckarena semua kerentanan dengan modelines penanganan di vim.
MattBianco
Dalam kasus saya, saya juga harus mengatur modelineske nilai bukan nol. Bantuan mengatakan defaultnya adalah 5, jadi itulah yang saya atur dan itulah yang membantu saya. Menyatakan bahwa,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.
filetype=conf
Last set from /usr/local/Cellar/vim/8.0.1350/share/vim/vim80/filetype.vim
Mungkin ada efek samping di conf saya, tetapi sintaks modeline yang tidak kompatibel adalah satu-satunya yang berfungsi seperti yang diharapkan untuk saya.
/usr/share/vim/vim80/debian.vimdari vim-commonpada distro berbasis Debian menonaktifkan modelinesecara default.
" modelines have historically been a source of security/resource
" vulnerabilities -- disable by default, even when 'nocompatible' is set
set nomodeline
Anda harus mengaktifkan modelinesecara eksplisit di file .vimrcatau Anda ~/.vim/vimrc.
Jawaban:
Itu seharusnya bekerja. Saya mencoba jalur itu sendiri dan berhasil. Saya bisa jadi pilihan 'modeline' Anda diatur ke 'nomodeline'. Coba jalankan ini dan lihat apa yang Anda dapatkan.
Itu akan memberi tahu Anda nilai opsi 'modeline' dan jika bukan default, di mana itu ditetapkan terakhir.
Beberapa distribusi Linux menetapkan 'nomodeline' di / etc / vimrc atau / usr / share / vim / vimrc sebagai langkah keamanan, meskipun masalah keamanan dengan 'modeline' telah lama diperbaiki.
sumber
modelines
bahwa opsi tersebut tidak diterapkan dan tidak akan pernah ada. Ini seperti semua bug keamanan yang berasal dari perintah yang tertanam file atau instruksi makro untuk dijalankan dalam PDF, Word, Excel, & c & c & c.Saya menggambarkan daftar periksa debug lengkap dalam jawaban lain ini .
Saya benar-benar bingung untuk yang satu ini karena dokumentasi ini tidak sepenuhnya benar.
Ternyata dalam versi 8 (dan mungkin sebelumnya) Anda tidak dapat menggunakan kata
set
dalam modeline Anda. Dokumentasi menggambarkan "bentuk kedua" sebagai/* vim: set ai tw=75: */
tetapi ini tidak bekerja. Anda harus menggunakan "formulir pertama"// vim: ai tw=75
Catatan: Anda dapat menggunakan salah satu dari indikator komentar tersebut. Atau tidak sama sekali.
sumber
set
berfungsi baik untuk saya pada vim 8.0 (walaupun tidak pada 7.4). Juga perlu dicatat bahwa dengan bentuk kedua// vim: ai tw=75
, tidak mungkin ada karakter lain di akhir baris, atau vim akan mengeluh dan mengabaikan modeline.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 [email protected] Übersetzt von [email protected] Riesige Version mit GTK2-GNOME GUI.
(Baris terakhir berarti dimodifikasi oleh ... , dikompilasi oleh ... , versi besar ... ).set modelines=1
(atau nilai non-0) di my ~ / .vimrc membuatnya berfungsi untuk saya.sumber
modeline
tidak juga disetel (yang secara default di Vim kecuali Anda root)set nomodeline
di/etc/vimrc
karena semua kerentanan dengan modelines penanganan di vim.modelines
ke nilai bukan nol. Bantuan mengatakan defaultnya adalah5
, jadi itulah yang saya atur dan itulah yang membantu saya. Menyatakan bahwa,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.
di ~ / .vimrc Anda perlu mengatur yang berikut:
sumber
Menambahkan hanya berikut ini untuk saya yang
~/.vimrc
bekerja untuk saya di kotak Funtoo Linux saya:sumber
Karena ini tampaknya muncul dalam pencarian:
Saya memiliki masalah yang sama:
tidak berfungsi, menghasilkan ft = conf juga. tanpa modeline di ~ / .bash_alias saya, ft kosong, jadi sesuatu berubah.
sementara
bekerja. kehadiran ":" terakhir tampaknya tidak relevan.
Saya menggunakan OSX dengan versi Vim8 yang diseduh, sebagai catatan.
ini aneh karena dari modeline membantu keduanya
dan
tampaknya didukung.
Output dari
dengan "vim: filetype = sh" is
tanpa modeline:
dengan "vim: set filetype = sh"
Mungkin ada efek samping di conf saya, tetapi sintaks modeline yang tidak kompatibel adalah satu-satunya yang berfungsi seperti yang diharapkan untuk saya.
sumber
/usr/share/vim/vim80/debian.vim
darivim-common
pada distro berbasis Debian menonaktifkanmodeline
secara default.Anda harus mengaktifkan
modeline
secara eksplisit di file.vimrc
atau Anda~/.vim/vimrc
.sumber
Kemungkinan besar itu karena modeline dinonaktifkan.
Saya mengatasinya dengan:
Dalam hal ini, perintah daftar putih default termasuk
filetype
.sumber