vundle “filetype plugin indent on” mengacaukan dengan tabwidth

9

Saya menginstal vundle kemarin dan sejak itu saya lakukan, tabwidth yang saya konfigurasi di vimrc saya diabaikan dan diatur kembali ke 4 bukannya 2.

Saya menemukan bahwa baris berikut setelah paragraf vundle menyebabkannya:

filetype plugin indent on

Lekukan saya sudah diatur seperti ini:

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set smartindent " Do smart indenting when starting a new line
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
exec 'set tabstop='    .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth

Anda dapat memeriksa vimrc penuh saya di sini .

Saya menguji masalah indentasi menggunakan skrip python (di mana indentasi sangat penting).

Saya sudah mencoba mengubah filetype plugin indent onke filetype plugin ontapi itu tidak mengubah apa pun. Hanya mengomentari kalimat itu akan membantu.
Sekarang, panduan instalasi vundle mengatakan, baris ini diperlukan.

Bagaimana cara memperbaiki masalah indentasi ini? Bisakah saya mengabaikan baris filetype atau apakah itu benar-benar wajib untuk tetap di vimrc?

Larutan:

Berkat @ChristianBrabandt dan @romainl, saya sekarang menemukan solusi yang juga dapat disimpan dalam satu file vimrc:

filetype plugin indent on

[...]

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
au Filetype * let &l:tabstop = s:tabwidth
au Filetype * let &l:shiftwidth = s:tabwidth
au Filetype * let &l:softtabstop = s:tabwidth
wullxz
sumber
Meskipun itu tidak menjawab pertanyaan Anda, saya mencoba dengan vim-plug bukan Vundle dan itu bekerja dengan baik ...
nobe4
2
Lihat faq
Christian Brabandt
Anda juga dapat menggunakan perintah otomatis OptionSet baru untuk mengatur ulang pengaturan lebar pita dan softtabstop
Christian Brabandt

Jawaban:

10

Hal pertama yang pertama; baris di bawah ini sama sekali tidak ada hubungannya dengan Vundle atau manajemen plugin:

filetype plugin indent on

Perintah itu melakukan tiga hal:

  • memungkinkan deteksi tipe file,
  • mengaktifkan skrip khusus-tipe file (ftplugins),
  • mengaktifkan skrip indentasi jenis-spesifik.

Baris itu ada karena beberapa manajer plugin harus memastikan deteksi tipe file dinonaktifkan sebelum melakukan sihir mereka dan menggunakan Vim untuk pemrograman akan menyedot lebih keras tanpa ftplugins dan indentasi yang tepat. Menurut pendapat saya mereka harus berurusan dengan deteksi tipe file secara internal tetapi juga ...

Bagaimanapun, masalah Anda disebabkan oleh ftplugins yang terlalu posesif yang mengesampingkan pengaturan indentasi Anda dengan mereka. Python ftplugin adalah penyebab paling umum karena diputuskan belum lama ini bahwa ia harus menegakkan PEP8.

Jalan keluar yang mudah adalah menghindari sumber ftplugin sama sekali:

filetype indent on

tetapi mereka biasanya datang dengan hal-hal yang berguna sehingga metode ini tidak benar-benar direkomendasikan.

Solusi terbersih adalah meninggalkan filetypegaris dalam keadaan "optimal":

filetype plugin indent on

dan timpa override mereka dengan milik Anda after/ftplugin/python.vim:

setlocal noexpandtab
setlocal shiftround
setlocal autoindent

let s:tabwidth=2
let &l:tabstop = s:tabwidth
let &l:shiftwidth = s:tabwidth
let &l:softtabstop = s:tabwidth

Catatan:

  • Saya menghapus smartindentkarena itu tidak pintar untuk memulai dengan dan usang oleh skrip indentasi filetype-spesifik pula.
  • Saya mengganti :executeperintah Anda dengan :letperintah pembersih untuk menghindari penggabungan yang tidak perlu.
romainl
sumber
1
Jika Anda menetapkan shiftwidthke nol dan softtabstopke -1 itu akan mengikuti pengaturan tabstop.
Christian Brabandt
terima kasih atas penjelasan anda. Saya ingin mempertahankan sebagian besar pengaturan saya di vimrc saya karena saya ingin menyinkronkannya ke beberapa komputer. Saya menggunakan solusi Anda di vimrc saya dan menggunakan tautan faq @ChristianBrabandt yang diposting di bawah pertanyaan saya dan berhasil. Saya akan mengedit pertanyaan saya untuk memasukkan solusi saya.
wullxz
4

Masalah lekukan berasal dari ftplugin, yang memuat file .vim dari /usr/share/vim/vim-version-/ftplugin/-filetype-.vimyang menimpa apa pun yang Anda miliki di .vimrcfile Anda . Anda dapat mengetahui di mana file itu dengan menjalankan perintah berikut di dalam vim :verbose set tabstop?. Output akan mengarahkan Anda ke file yang mengesampingkan konfigurasi Anda.

Dalam kasus saya, saya mengalami masalah dengan konfigurasi lekukan python saya.

Cara mudah untuk menyelesaikan ini adalah dengan melakukan hal berikut:

Buat folder .vim di folder rumah Anda (jika Anda tidak memilikinya)

cd ~/.vim
mkdir -p after/ftplugin/
cd ~/.vim/after/ftplugin/
vim python.vim

Tambahkan yang berikut ini:

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

Ubah apa pun yang Anda inginkan dalam perintah. Milik saya terlihat seperti itu karena saya bekerja dengan tab bukan spasi putih.

ysdelahoz
sumber