mengatur formatoptions di vimrc diabaikan

9

Vim secara otomatis melanjutkan komentar ketika saya menekan Enter dalam mode Insert, yang menurut saya sangat membantu.

Namun, saya tidak ingin komentar berlanjut setelah menekan 'o' dari mode normal untuk memasukkan baris baru di bawah akhir komentar.

Saya membaca bahwa saya perlu menghapus opsi odari saya formatoptions, jadi saya meletakkan baris ini tepat di akhir file vimrc saya:

set formatoptions-=o

Tapi itu tidak mengubah apa-apa, dan ketika saya mengeksekusi :set formatoptionsdari iside of vim itu menunjukkan pilihan format saya croql.

Bagaimana cara saya menyingkirkan 'o'?

Edit:

Saya telah mengikuti beberapa langkah yang ditunjukkan dalam komentar oleh Sato Katsura:

Solusi dimulai dengan menjalankan :verb set fountuk melihat di mana opsi format terakhir diubah.

Inilah output untuk verb set fo:

  formatoptions=croql
        Last set from /usr/share/vim/vim73/ftplugin/vim.vim
theonlygusti
sumber
1
@DJMcMayhem Itu tidak menyelesaikan masalah saya. Seperti yang Anda lihat, saya telah mengambil pendekatan yang direkomendasikan oleh jawaban untuk pertanyaan itu, dan perilaku vim tidak berubah.
theonlygusti
1
Ya, saya melihat itu. Saya terlalu tergesa-gesa dengan suara dekat saya, jadi saya telah menarik kembali sekarang. Namun, sekarang kedengarannya seperti masalah dengan Anda .vimrc, jadi kami tidak dapat membantu sama sekali sampai Anda mempostingnya. Saya menduga sebuah plugin mengubahnya, atau itu tidak menjadi sumber dengan benar.
James
2
Pada dasarnya, pertanyaannya adalah "mengapa garis set formatoptions-=odi vimrc saya tidak berfungsi?", Bahwa ini menonaktifkan komentar ketika menekan oadalah kebetulan :-)
Martin Tournoij
@Carpetsmoker ya cukup banyak ... apakah perlu diedit?
theonlygusti

Jawaban:

8

Saat vimdimulai, ia dijalankan $VIMRUNTIME/ftdetect.vimuntuk mengetahui jenis file apa yang Anda edit; kemudian, jika Anda telah 'ftplugin'mengatur, ia sumber $VIMRUNTIME/ftplugin.vimmana sumber $VIMRUNTIME/ftplugin/&filetype.vim(lihat :help startuplebih detail).

Anda dapat mengubah atau menimpa $VIMRUNTIME/ftplugin.vimatau $VIMRUNTIME/ftplugin/&filetype.vim. Buat folder dan subfolder di direktori home Anda bernama .vim/after.

Jika Anda ingin mengganti opsi format untuk semua plugin tipe file, edit $HOME/.vim/after/ftplugin.vim, atau edit $HOME/.vim/after/ftplugin/lua.vim(atau ganti luadengan bahasa apa pun - dalam kasus Anda, itu vim). Untuk penjelasan yang tepat tentang cara kerjanya, lihat :help 'runtimepath'(dan :help :runtime).

Masukkan konten berikut ke dalam file:

set formatoptions-=o

Anda dapat melihat apakah itu berhasil dengan menjalankan :scriptnames. Anda harus mendapatkan daftar seperti berikut:

  1: H:\script\vim\vimrc
  2: H:\script\vim\syntax\syntax.vim
  3: H:\script\vim\syntax\synload.vim
  4: H:\script\vim\syntax\syncolor.vim
  5: H:\script\vim\filetype.vim
  6: ~\vimfiles\ftdetect\log.vim
  7: ~\vimfiles\ftdetect\rdp.vim
  8: ~\vimfiles\ftdetect\scratch.vim
  9: ~\vimfiles\ftdetect\sqlite.vim
 10: ~\vimfiles\ftdetect\todo.vim
 11: H:\script\vim\ftplugin.vim
 12: ~\vimfiles\after\ftplugin.vim
 13: ~\vimfiles\colors\desert.vim
 14: H:\script\vim\defaults.vim
 15: H:\script\vim\plugin\getscriptPlugin.vim
 16: H:\script\vim\plugin\gzip.vim
 17: H:\script\vim\plugin\logiPat.vim
 18: H:\script\vim\plugin\manpager.vim
 19: H:\script\vim\plugin\matchparen.vim
 20: H:\script\vim\plugin\netrwPlugin.vim
 21: H:\script\vim\plugin\rrhelper.vim
 22: H:\script\vim\plugin\spellfile.vim
 23: H:\script\vim\plugin\tarPlugin.vim
 24: H:\script\vim\plugin\tohtml.vim
 25: H:\script\vim\plugin\vimballPlugin.vim
 26: H:\script\vim\plugin\zipPlugin.vim
 27: H:\script\vim\syntax\lua.vim
 28: H:\script\vim\ftplugin\lua.vim

Perhatikan baris 11 dan 12. Jalur file Anda akan terlihat sedikit berbeda.

abcq2
sumber
1
Ini mungkin bermanfaat bagi seseorang. Dalam situasi saya, saya menggunakan vim-plug, dan beberapa plugins (saya tidak tahu yang mana) mengubah formatoptions, namun saya .vim/afterbersumber setelah plugins itu ...
voldikss
Saya pikir perintah yang benar adalah :scriptnames.
Jari Turkia
Dengan trial and error, saya belajar bahwa mencoba untuk memaksa formatoptionsdalam ~/.vim/after/ftplugins.vimtidak bekerja - maka saya temui argumen ini yang semacam-of menjelaskan mengapa.
Stabledog
3

Saya menemukan bahwa saya dapat memberikan solusi darurat menggunakan autocommand.

Baris berikut dalam .vimrcfile Anda harus menerapkan opsi format baru di mana-mana:

autocmd FileType * set formatoptions-=o

Namun, ini tidak benar-benar menyelesaikan masalah; Saya masih tidak mengerti mengapa yang sederhana settidak cukup, dan seperti yang telah ditunjukkan dalam komentar solusi ini tidak ideal.

theonlygusti
sumber
1
Ini mungkin berhasil , tetapi sangat kludgy dan bukan solusi yang saya sarankan.
James
@DJMcMayhem hmm, masalah apa yang bisa saya hadapi dengan menggunakan solusi ini? Jangan ragu untuk mengirim jawaban yang memberikan solusi yang lebih baik, saya jelas akan lebih suka :)
theonlygusti
1
Kenapa tidak @DJMcMayhem? Masalahnya hampir pasti karena salah satu set filetypes formatoptions(misalnya Perl, Ruby, dan beberapa lainnya mengatur ini). Ini sepertinya solusi yang bisa diterima?
Martin Tournoij
@Carpetsmoker Saya kira itu adil. Saya tidak memikirkan itu. Sepertinya aneh untuk mengubah pengaturan dalam autocmd, daripada hanya mengaturnya secara langsung.
James
2
@SatoKatsura Tergantung pada apa yang Anda inginkan, saya kira. Beberapa orang mungkin lebih suka tidak pernah menambahkan karakter komentar ketika menggunakan oterlepas dari jenis file, dalam hal ini tampaknya tepat.
Martin Tournoij
2

Saya memiliki pengalaman serupa dengan OP.

Saya menemukan bahwa tsedang ditambahkan ke saya formatoptionsmeskipun sengaja berusaha untuk menonaktifkannya.

Setelah menggunakan :verbose set fountuk memastikan itu berasal dari .vimrc, saya perhatikan bahwa perilaku tampaknya tergantung pada tempat saya meletakkan formatoptions dalam file .vimrc saya. Saya menemukan bahwa itu terjadi karena tempat saya meletakkan set nocompatiblefile saya:

set formatoptions=qj
set nocompatible

:set fo?
  formatoptions=tcq

Ternyata ini secara khusus disebut dalam :help nocompatible:

                   'compatible' 'cp' 'nocompatible' 'nocp'
'compatible' 'cp'   boolean (default on, off when a |vimrc| or |gvimrc|
                    file is found, reset in |defaults.vim|)
            global
            {not in Vi}
    This option has the effect of making Vim either more Vi-compatible, or
    make Vim behave in a more useful way.

    This is a special kind of option, because when it's set or reset,
    other options are also changed as a side effect.
    NOTE: Setting or resetting this option can have a lot of unexpected
    effects: Mappings are interpreted in another way, undo behaves
    differently, etc.  If you set this option in your vimrc file, you
    should probably put it at the very start.

Setelah mengikuti saran yang baik ini, saya formatoptionsdipertahankan sesuai keinginan. Saya tidak tahu apakah OP mengalami masalah ini atau apakah itu interaksi lain, tapi saya senang mengetahui apa yang menyebabkannya. Semoga ini membantu orang lain mencari tahu apa yang (awalnya tidak bisa dijelaskan) mengubah pengaturan mereka.

Saya juga suka theonlygusti autocmd- ada beberapa opsi yang saya tidak ingin atur apa pun jenis filenya. Aku melihatmu t,.

dideZZed
sumber
2

Karena banyak dari kita pengguna Vim menderita dari ini, saya pergi dan menyelidiki ini lebih sedikit.

Solusi saya adalah membuat $HOME/.vim/after/ftplugin.vimseperti yang disarankan oleh @ abcq2 hanya untuk menyadari, itu tidak akan mengubah apa pun. Mengingat daftar yang diberikan oleh :scriptnames, file itu sumbernya terlalu dini. Namun, saran kedua untuk membuat $HOME/.vim/after/ftplugin/lua.vimfile LUA memang membantu.

Dengan straceing, saya belajar bahwa tipe-generik setelah-plugin bersumber sebelum tipe-file dan tipe-spesifik setelah-plugin bersumber setelah tipe-file. Tidak terlalu intuitif, tetapi begitulah cara kerjanya.

Ada lebih banyak informasi di blog saya tentang ini.

Jari Turkia
sumber
Saya tidak yakin mengapa Anda berpikir after/ftpluginakan membantu. Alih-alih, cara yang lebih baik adalah dengan menggunakan penggantian jenis file tertentu (baik menggunakan perintah otomatis FileType atau after/<filetype>.vimfile tertentu ). Lihat juga bantuan di:h ftplugin-overrule
Christian Brabandt
Saya pikir ini akan membantu, karena @ abcq2 menyarankannya dalam jawaban di atas. Saya pikir saya menggunakan after/<filetype>.vimjawaban saya.
Jari Turkia
0

Saya melihat untuk melihat file / jalur mana yang vimmencoba memuat, menggunakan strace(seperti yang dijelaskan di sini ), kemudian membuat ~/.vim/after/plugin/direktori (itu adalah lokasi konfigurasi terakhir yang vimberusaha memuat), lalu menyinkronkan saya ~/.vimrcke lokasi itu:

mkdir -p ~/.vim/after/plugin/
ln -s ~/.vimrc ~/.vim/after/plugin/ 

Apa yang saya lakukan dengan strace:

Pada dasarnya, saya berlari:

strace -o ~/vim_strace vim

... lalu segera berhenti vim( :q!). Selanjutnya, saya memuat ~/vim_strace( $ vim ~/vim_strace) dan pergi ke akhir ( :$). Kemudian saya mulai membaca dari bawah mencari garis yang dimulai dengan openat(AT_FDCWD, "/home/karl/......

Hal pertama yang saya lihat adalah:

openat(AT_FDCWD, "/home/karl/.viminfo", O_RDONLY) = 3

Tapi itu bukan tempat saya menginginkan opsi konfigurasi saya. Baris berikutnya, tepat di atas .viminfogaris, adalah:

openat(AT_FDCWD, "/home/karl/.vim/after/plugin/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)

... "Tidak ada file atau direktori", eh? Sepertinya pemenang. Jadi, itulah yang saya pilih.

Sekarang, bekerja dengan sempurna.

Semoga ini bisa membantu seseorang di suatu tempat.

Karl Wilbur
sumber
1
Maaf, tetapi saya gagal melihat bagaimana ini merupakan jawaban untuk pertanyaan ini. Bisakah Anda menjelaskan dan menjelaskan mengapa ini akan menyelesaikan masalah dengan opsi format?
filbranden
Karena itu sebenarnya vimuntuk menghormati opsi dalam .vimrcfile. Harap baca kembali, dan pastikan Anda mengerti, baik pertanyaan maupun jawaban saya.
Karl Wilbur
1) vimrc (keseluruhan) Anda tidak benar-benar seharusnya berjalan pada konteks plugin. 2) Sesuatu seperti menambahkan satu baris ~/.vim/after/plugin/formatoptions.vimdengan set fo-=olebih enak ... Tapi itu masih tidak berfungsi ketika plug-in tipe file menimpanya. Misalnya, buka Vim (tanpa file, atau file yang tidak terkait), lalu gunakan :euntuk membuka atau membuat *.vimfile. Anda akan melihat bahwa opsi format sudah ada odi dalamnya lagi, karena sudah ditetapkan untuk buffer itu ftplugin/vim.vimdan after/pluginfile Anda tidak akan bisa menimpanya.
filbranden
Dalam hal apa pun ... Jawaban Anda tidak sepenuhnya jelas tentang apa yang ingin Anda capai di sini. Saya dapat melihat (sekarang?) Bahwa Anda mencoba memuat vimrc terakhir dalam proses startup, setelah semua plug-in. Jawaban Anda tidak benar-benar menyatakan itu, akan membantu jika Anda mulai dengan menjelaskan bahwa ... Juga, sementara strace bagus dan semuanya, menjawab "direktori mana yang terakhir" cukup mudah, hanya dengan melihat :set rtp?Anda akan melihat bahwa itu ~/.vim/afteradalah terakhir. Tapi, seperti yang disebutkan sebelumnya, ini tidak benar-benar berfungsi karena foakan diatur ulang oleh plugin ft dan itu benar-benar masalah di sini.
filbranden
Benar-benar berhasil, dan itu benar-benar berfungsi. Saya mengalami masalah yang sama persis dengan OP setelah memutakhirkan ke Ubuntu 20.04. Solusi saya "memperbaikinya", karena itu memuat saya ~/.vimrc setelah plugin lain dimuat, sehingga memungkinkan saya ~/.vimrcuntuk menimpa default, seperti yang dimaksud.
Karl Wilbur