Як налаштувати vim для редагування файлів Makefile та звичайних кодів?


22

Я використовую Mac OSX 10.7.5, вміст .vimrc такий:

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set shiftround  
set smarttab    
set autoindent  
set copyindent  

autocmd FileType make setlocal noexpandtab

Що я намагаюся зробити, це коли я редагую звичайні файли, такі як .js, .html, я хочу, щоб мої вкладки були відступними 4-ма порожними місцями замість звичайної вкладки.

Але коли я редагую Makefile, мені потрібно, щоб це була звичайна вкладка замість 4 порожніх пробілів для відступів.

Я подумав, що наведена вище настройка в .vimrc мені це дасть, але не працює для мене, як коли я редагую Makefile, я все ще отримую 4 порожніх пробілу для відступу.

Не впевнений, що я тут роблю неправильно?

Відповіді:


26

Це розділ мого .vimrc:

" enable filetype detection:
filetype on
filetype plugin on
filetype indent on " file type based indentation

" recognize anything in my .Postponed directory as a news article, and anything
" at all with a .txt extension as being human-language text [this clobbers the
" `help' filetype, but that doesn't seem to prevent help from working
" properly]:
augroup filetype
  autocmd BufNewFile,BufRead */.Postponed/* set filetype=mail
  autocmd BufNewFile,BufRead *.txt set filetype=human
augroup END

autocmd FileType mail set formatoptions+=t textwidth=72 " enable wrapping in mail
autocmd FileType human set formatoptions-=t textwidth=0 " disable wrapping in txt

" for C-like  programming where comments have explicit end
" characters, if starting a new line in the middle of a comment automatically
" insert the comment leader characters:
autocmd FileType c,cpp,java set formatoptions+=ro
autocmd FileType c set omnifunc=ccomplete#Complete

" fixed indentation should be OK for XML and CSS. People have fast internet
" anyway. Indentation set to 2.
autocmd FileType html,xhtml,css,xml,xslt set shiftwidth=2 softtabstop=2

" two space indentation for some files
autocmd FileType vim,lua,nginx set shiftwidth=2 softtabstop=2

" for CSS, also have things in braces indented:
autocmd FileType css set omnifunc=csscomplete#CompleteCSS

" add completion for xHTML
autocmd FileType xhtml,html set omnifunc=htmlcomplete#CompleteTags

" add completion for XML
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags

" in makefiles, don't expand tabs to spaces, since actual tab characters are
" needed, and have indentation at 8 chars to be sure that all indents are tabs
" (despite the mappings later):
autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

" ensure normal tabs in assembly files
" and set to NASM syntax highlighting
autocmd FileType asm set noexpandtab shiftwidth=8 softtabstop=0 syntax=nasm

Розділ має бути роз'яснювальним, але я пропоную вам прочитати довідку vim на filetypeта autocmd.

Найбільш релевантний для вас рядок - це, мабуть, цей:

autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

але переконайтеся, що ввімкнено функцію виявлення файлів.


Дякуємо за чудові автокоманди! Я помітив , в цьому підручнику , навчаючись від вашого , .vimrcщо якщо ви не обернути autocmdз в augroupсекції, Vim буде читати їх в і дублювати їх. Це правильно?
Джошуа

6

Замість того, щоб робити це за допомогою autocmds, ви можете створити свій власний плагін для файлів для кожного файлу та розмістити його ~/.vim/ftplugin/<filetype>.vimтам, де <filetype>є власне тип файлу, який ви бажаєте. Наприклад:

mkdir -p ~/.vim/ftplugin
echo "setlocal noexpandtab" > ~/.vim/ftplugin/make.vim

Вам потрібно переконатися, що у вас увімкнено плагіни файлів типу у ~/.vimrcтакій команді:

filetype plugin on

Ця відповідь має більше сенсу, якщо ви хочете, щоб ваші .vimrc та .vim каталоги були впорядковані.
Флобі

0

Простіше налаштувати vim для того, щоб завжди розширювати вкладки, що саме потрібно для всіх файлів, крім makefiles. У makefiles ви можете використовувати вставку вкладки куди завгодно. Це не буде розширено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.