ใครสามารถอธิบายให้ฉันในแง่ง่ายวิธีที่ง่ายที่สุดในการเปลี่ยนพฤติกรรมการเยื้องของ Vim ตามประเภทของไฟล์? ตัวอย่างเช่นถ้าฉันเปิดไฟล์ Python มันควรจะมี 2 ช่องว่าง แต่ถ้าฉันเปิดสคริปต์ Powershell ก็ควรใช้ช่องว่าง 4 ช่อง
ใครสามารถอธิบายให้ฉันในแง่ง่ายวิธีที่ง่ายที่สุดในการเปลี่ยนพฤติกรรมการเยื้องของ Vim ตามประเภทของไฟล์? ตัวอย่างเช่นถ้าฉันเปิดไฟล์ Python มันควรจะมี 2 ช่องว่าง แต่ถ้าฉันเปิดสคริปต์ Powershell ก็ควรใช้ช่องว่าง 4 ช่อง
คำตอบ:
คุณสามารถเพิ่ม.vim
ไฟล์ที่จะดำเนินการเมื่อใดก็ตามที่ vim เปลี่ยนเป็นประเภทไฟล์เฉพาะ
ตัวอย่างเช่นฉันมีไฟล์ที่~/.vim/after/ftplugin/html.vim
มีเนื้อหานี้:
setlocal shiftwidth=2
setlocal tabstop=2
ซึ่งสาเหตุที่เป็นกลุ่มที่จะใช้แท็บที่มีความกว้างของ 2 ตัวอักษรสำหรับการเยื้อง (คนnoexpandtab
ตั้งค่าตัวเลือกอื่น ๆ ทั่วโลกในการกำหนดค่าของฉัน)
นี่คือคำอธิบายที่นี่: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4เลื่อนลงไปที่ส่วนของปลั๊กอินชนิดไฟล์
~/.vim/after/ftplugin/html.vim
แทน แต่ในขณะที่คนอื่น ๆ ได้ชี้ให้เห็นด้านล่างมันมาก nicer เพียงแค่เพิ่มที่คุณautocmd FileType html setlocal shiftwidth=2 tabstop=2
.vimrc
autocmd FileType javascript setlocal shiftwidth=2 tabstop=2
)
filetype plugin on
vimrc ของคุณด้วย
ใช้ ftplugins หรือคำสั่งอัตโนมัติเพื่อตั้งค่าตัวเลือก
ใน ~/.vim/ftplugin/python.vim:
setlocal shiftwidth=2 softtabstop=2 expandtab
และอย่าลืมเปิดใช้งานใน~/.vimrc
:
filetype plugin indent on
( :h ftplugin
สำหรับข้อมูลเพิ่มเติม)
ใน~/.vimrc
:
autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab
คุณสามารถเปลี่ยนใด ๆ ของคำสั่งยาวหรือการตั้งค่ากับรุ่นสั้น:
autocmd
: au
setlocal
: setl
shiftwidth
: sw
tabstop
: ts
softtabstop
: sts
expandtab
:et
ฉันยังอยากจะแนะนำการเรียนรู้แตกต่างระหว่างและtabstop
ผู้คนจำนวนมากไม่ทราบเกี่ยวกับsofttabstop
softtabstop
sw
สั้นสำหรับsoftwidth
, sts
สั้นสำหรับsofttabstop
, et
สั้นสำหรับexpandtab
, setl
สั้นสำหรับsetlocal
และสั้นสำหรับau
autocmd
คุณสามารถใช้แบบยาวแทนแบบสั้น
sw
จะขยายออกไปมากกว่าshiftwidth
softwidth
แก้ไขของคุณ~/.vimrc
และเพิ่มประเภทไฟล์ที่แตกต่างกันสำหรับเยื้องที่แตกต่างกันเช่นฉันต้องการhtml/rb
เยื้อง 2 ช่องว่างและjs/coffee
ไฟล์เยื้อง 4 ช่องว่าง:
" by default, the indent is 2 spaces.
set shiftwidth=2
set softtabstop=2
set tabstop=2
" for html/rb files, 2 spaces
autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
" for js/coffee/jade files, 4 spaces
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab
อ้างถึง: การตั้งค่าการกำหนดค่าตามความชอบช่องว่าง Vim ตามชนิดไฟล์
"
:)
'
ให้ข้อผิดพลาดในกลุ่มของ Linux ทั้งหมดของฉัน (7.3+, 8.0 ... )
"
หมายความว่าอย่าปิดมันด้วยอีก"
อัน ไม่แน่ใจว่าทำไมฉันถึงแสดงความคิดเห็นว่า
'
แต่ไม่เหลือ"
โดยไม่มีสิทธิ์"
@. @
วางคำสั่ง autocmd ตามคำต่อท้ายไฟล์ใน ~ / .vimrc ของคุณ
autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile *.pl syntax on
คำสั่งที่คุณกำลังค้นหาน่าจะเป็น ts = และ sw =
FileType
?
ฉันมักจะทำงานกับexpandtab
ฉาก แต่มันก็ไม่ดีสำหรับ makefiles ฉันเพิ่งเพิ่ม:
:autocmd FileType make set noexpandtab
ที่ส่วนท้ายของไฟล์. vimrc ของฉันและจะรู้จัก Makefile, makefile และ * .mk เป็น makefiles และไม่ขยายแท็บ สมมุติคุณสามารถขยายสิ่งนี้ได้
ส่วนตัวฉันใช้การตั้งค่าเหล่านี้ใน. vimrc:
autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab
สิ่งนี้อาจเป็นที่รู้จักของคนส่วนใหญ่ แต่ต่อไป (ฉันงงครั้งแรกของฉัน): กำลังทำ :set et
( :set
expandtabs) :retab
ไม่ได้เปลี่ยนแท็บที่มีอยู่แล้วในแฟ้มหนึ่งจะต้องทำ ตัวอย่างเช่น:
:set et
:retab
และแท็บในไฟล์จะถูกแทนที่ด้วยพื้นที่ว่างเพียงพอ หากต้องการให้แท็บกลับมาทำได้ง่ายๆ:
:set noet
:retab
วันนี้คุณสามารถลองeditorconfigนอกจากนี้ยังมีปลั๊กอินเป็นกลุ่มสำหรับดังกล่าว ด้วยสิ่งนี้คุณจะไม่สามารถเปลี่ยนขนาดการเยื้องเป็นกลุ่มได้เป็นอย่างดี แต่ในโปรแกรมแก้ไขอื่น ๆ หลาย ๆ ตัวให้ใช้รูปแบบการเข้ารหัสที่สอดคล้องกัน
ด้านล่างนี้เป็นตัวกำหนดค่าแบบเรียบง่ายอย่างที่คุณเห็นไฟล์ไพ ธ อนจะมี 4 ช่องว่างสำหรับการเยื้องและไฟล์เทมเพลตปั๊กจะมีเพียง 2
# 4 space indentation for python files
[*.py]
indent_style = space
indent_size = 4
# 2 space indentation for pug templates
[*.pug]
indent_size = 2
ในขณะที่คุณสามารถกำหนดค่าการเยื้องของ Vim ได้ดีโดยใช้ปลั๊กอินการเยื้องหรือด้วยตนเองโดยใช้การตั้งค่าฉันขอแนะนำให้ใช้สคริปต์ python ชื่อVindectซึ่งจะกำหนดการตั้งค่าที่เกี่ยวข้องโดยอัตโนมัติเมื่อคุณเปิดไฟล์หลาม ใช้เคล็ดลับนี้เพื่อให้การใช้ Vindect มีประสิทธิภาพยิ่งขึ้น เมื่อฉันเริ่มแก้ไขไฟล์หลามที่สร้างโดยคนอื่นด้วยรูปแบบการเยื้องต่างๆ (แท็บเทียบกับพื้นที่และจำนวนช่องว่าง) มันน่าผิดหวังอย่างไม่น่าเชื่อ แต่ Vindect พร้อมกับไฟล์เยื้องนี้
แนะนำด้วย:
สำหรับผู้ที่ใช้autocmd
มันเป็นวิธีที่ดีที่สุดในการจัดกลุ่มคนเหล่านั้นด้วยกัน หากการจัดกลุ่มเกี่ยวข้องกับการตรวจจับประเภทไฟล์คุณอาจมีลักษณะดังนี้:
augroup filetype_c
autocmd!
:autocmd FileType c setlocal tabstop=2 shiftwidth=2 softtabstop=2 expandtab
:autocmd FileType c nnoremap <buffer> <localleader>c I/*<space><esc><s-a><space>*/<esc>
augroup end
การจัดกลุ่มช่วยให้การ.vimrc
จัดระเบียบโดยเฉพาะอย่างยิ่งเมื่อชนิดไฟล์มีกฎหลายข้อที่เกี่ยวข้อง ในตัวอย่างด้านบนมีการกำหนดทางลัดความคิดเห็นเฉพาะไฟล์. c
การเรียกเริ่มต้นเพื่อautocmd!
บอกให้ vim ลบการเติมข้อความอัตโนมัติที่กำหนดไว้ก่อนหน้าใด ๆ ในการจัดกลุ่มดังกล่าว การทำเช่นนี้จะป้องกันไม่ให้มีคำจำกัดความซ้ำซ้อนหาก.vimrc
มีที่มาอีกครั้ง ดู:help augroup
ข้อมูลเพิ่มเติมได้ที่
ผมใช้ยูทิลิตี้ที่ผมเขียนใน C autotab
เรียกว่า มันวิเคราะห์ครั้งแรกไม่กี่พันสายของไฟล์ที่คุณโหลดและกำหนดค่าสำหรับพารามิเตอร์ที่เป็นกลุ่มshiftwidth
, และtabstop
expandtab
gcc -O autotab.c -o autotab
นี้จะรวบรวมโดยใช้ตัวอย่างเช่น คำแนะนำสำหรับการรวมเข้ากับ Vim อยู่ในส่วนหัวของความคิดเห็นที่ด้านบน
Autotab นั้นค่อนข้างชาญฉลาด แต่อาจสับสนได้บ้างเป็นครั้งคราวโดยเฉพาะอย่างยิ่งเมื่อมีการคงรูปแบบที่ไม่สอดคล้องกันโดยใช้รูปแบบการเยื้องที่แตกต่างกัน
หากไฟล์เห็นได้ชัดว่าใช้แท็บหรือการรวมกันของแท็บและช่องว่างสำหรับการเยื้อง Autotab จะหาขนาดของแท็บที่ใช้โดยพิจารณาจากปัจจัยต่างๆเช่นการจัดเรียงองค์ประกอบภายในข้ามบรรทัดที่ต่อเนื่องเช่นความคิดเห็น
มันใช้งานได้กับภาษาการเขียนโปรแกรมที่หลากหลายและเป็นการให้อภัยองค์ประกอบ "นอกวง" ซึ่งไม่เชื่อฟังการเพิ่มการเยื้องเช่นคำสั่งการประมวลผลล่วงหน้าของ C ป้ายกำกับคำสั่ง C ไม่ต้องพูดถึงบรรทัดว่างที่ชัดเจน