vundle“ ปลั๊กอินชนิดของไฟล์ย่อหน้าบน” messes ด้วย tabwidth


9

ฉันติดตั้ง vundle เมื่อวานและตั้งแต่นั้นมาแท็บที่ฉันกำหนดค่าใน vimrc ของฉันจะถูกละเว้นและตั้งค่ากลับเป็น 4 แทนที่จะเป็น 2

ฉันพบว่าบรรทัดต่อไปนี้หลังจากย่อหน้า vundle เป็นสาเหตุ:

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 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

คุณสามารถตรวจสอบ vimrc เต็มของฉันที่นี่

ฉันทดสอบปัญหาการเยื้องโดยใช้สคริปต์ไพ ธ อน (ซึ่งการเยื้องสำคัญมาก)

ฉันลองเปลี่ยนfiletype plugin indent onไปfiletype plugin onแล้วแต่ไม่เปลี่ยนอะไรเลย การใส่ความคิดเห็นเฉพาะบรรทัดนั้นจะช่วยได้
ตอนนี้คำแนะนำในการติดตั้ง vundle บอกว่าต้องมีบรรทัดนี้

ฉันจะแก้ไขปัญหาเยื้องนี้ได้อย่างไร ฉันสามารถเพียง ommit บรรทัด filetype หรือจริงๆแล้วมันบังคับให้มันอยู่ใน vimrc หรือไม่

สารละลาย:

ขอบคุณ @ChristianBrabandt และ @romainl ฉันได้พบวิธีแก้ปัญหาที่สามารถอยู่ในไฟล์ 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

แม้ว่ามันจะไม่ตอบคำถามของคุณ แต่ฉันก็ลองใช้ vim-plug แทน Vundle และมันทำงานได้อย่างสมบูรณ์แบบ ...
nobe4


คุณสามารถใช้ OptionSet autocommand ใหม่เพื่อรีเซ็ตค่าความกว้างและการตั้งค่า
softtabstop

คำตอบ:


10

สิ่งแรกแรก; บรรทัดด้านล่างไม่มีส่วนเกี่ยวข้องกับ Vundle หรือการจัดการปลั๊กอิน:

filetype plugin indent on

คำสั่งนั้นทำสามสิ่ง:

  • เปิดใช้งานการตรวจจับประเภทไฟล์
  • เปิดใช้งานสคริปต์เฉพาะประเภทไฟล์ (ftplugins)
  • เปิดใช้งานสคริปต์การเยื้องเฉพาะชนิดไฟล์

บรรทัดนั้นอยู่ที่นั่นเพราะผู้จัดการปลั๊กอินบางคนต้องตรวจสอบให้แน่ใจว่าการตรวจจับประเภทไฟล์ถูกปิดใช้งานก่อนที่จะใช้เวทย์มนตร์ของพวกเขาและการใช้ Vim สำหรับการเขียนโปรแกรมจะดูดได้ยากขึ้นมาก ฉันคิดว่าพวกเขาควรจัดการกับการตรวจจับไฟล์ภายใน แต่ก็ ...

อย่างไรก็ตามปัญหาของคุณมีสาเหตุมาจาก ftplugins ที่ครอบงำซึ่งแทนที่การตั้งค่าการเยื้องของพวกเขาด้วยพวกเขา หลาม ftplugin เป็นผู้ร้ายที่พบบ่อยที่สุดเพราะมันถูกตัดสินเมื่อไม่นานมานี้ว่ามันควรจะบังคับใช้ PEP8

ทางออกที่ง่ายคือหลีกเลี่ยงการจัดหา ftplugins ทั้งหมด:

filetype indent on

แต่พวกเขามักจะมาพร้อมกับสิ่งที่มีประโยชน์ดังนั้นวิธีการที่ไม่แนะนำจริงๆ

ทางออกที่สะอาดที่สุดคือปล่อยให้filetypeสายอยู่ในสถานะ "ดีที่สุด":

filetype plugin indent on

และแทนที่พวกเขาด้วยตัวคุณเอง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

หมายเหตุ:

  • ฉันลบsmartindentเพราะไม่ใช่ว่าสมาร์ทจะเริ่มต้นด้วยและคัดค้านโดยสคริปต์ย่อหน้าเฉพาะชนิดไฟล์
  • ฉันแทนที่:executeคำสั่งของคุณด้วย:letคำสั่งที่สะอาดกว่าเพื่อหลีกเลี่ยงการต่อข้อมูลที่ไม่จำเป็น

1
หากคุณตั้งค่าshiftwidthเป็นศูนย์และsofttabstopเป็น -1 มันจะทำตามการตั้งค่า tabstop
Christian Brabandt

ขอบคุณสำหรับคำอธิบายของคุณ ฉันต้องการรักษาการตั้งค่าส่วนใหญ่ของฉันใน vimrc ของฉันเพราะฉันต้องการซิงค์กับคอมพิวเตอร์หลายเครื่อง ฉันใช้โซลูชันของคุณใน vimrc ของฉันและใช้ลิงค์คำถามที่พบบ่อย @ChristianBrabandt โพสต์ด้านล่างคำถามของฉันและใช้งานได้ ฉันจะแก้ไขคำถามของฉันเพื่อรวมโซลูชันของฉัน
wullxz

4

ปัญหาการเยื้องมาจาก ftplugin ซึ่งโหลดไฟล์. vim จาก/usr/share/vim/vim-version-/ftplugin/-filetype-.vimนั้นจะแทนที่สิ่งที่คุณมีใน.vimrcไฟล์ของคุณ :verbose set tabstop?คุณสามารถหาที่ไฟล์ที่เป็นโดยการเรียกใช้คำสั่งภายในกลุ่มต่อไปนี้ ผลลัพธ์จะนำคุณไปยังไฟล์ที่แทนที่การกำหนดค่าของคุณ

ในกรณีของฉันฉันมีปัญหากับการกำหนดค่าการเยื้องของหลาม

วิธีง่ายๆในการแก้ไขปัญหานี้คือทำดังต่อไปนี้:

สร้างโฟลเดอร์. vim ในโฟลเดอร์โฮมของคุณ (หากคุณไม่มี)

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

เพิ่มรายการต่อไปนี้:

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

ปรับเปลี่ยนสิ่งที่คุณต้องการในคำสั่ง ของฉันดูเหมือนว่าเพราะฉันทำงานกับแท็บแทนช่องว่าง

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