2009-09-10 5 views
14

Моя дневная работа включает кодирование с помощью Perl. Дома я играю с Python и Erlang. Для Perl я хочу отложить мой код двумя пробелами. В то время как для Python стандартным является 4. Также у меня есть некоторые привязки клавиш для открытия объявлений функций, которые я хотел бы использовать со всеми языками программирования. Как это можно достичь в gVim?gVim и несколько языков программирования

Как и в случае, существует ли способ поддерживать файл конфигурации для каждого языка программирования или что-то в этом роде?

ответ

22

Вы должны быть в состоянии сделать с помощью используя ... например, типы файлов, добавьте в ваш vimrc (и изменить соответствующим образом для разных языков):

autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab 
+20

Не переопределяйте настройки по умолчанию. Вместо 'set' используйте 'setlocal' (или 'setl'). Вы не хотите, чтобы настройки последнего разворота autocmd переходили в другие буферы. –

+0

@Maxim - Good catch ... :-) –

+2

Команда 'set' принимает несколько опций. Итак, проще написать: 'set tabstop = 4 shiftwidth = 4 expandtab' –

23

В вашем $ HOME, сделать .vim/каталог (или vimfiles/в Windows), в нем создайте каталог ftplugin/и сохраните файлы с именем «perl.vim» или «python.vim» или «html.vim» или ...

Их необходимо загрузить автоматически при открытии/создании нового файла данного типа файлов, если вы не забудете добавить :filetype plugin on в свой .vimrc (или _vimrc под окнами)

Затем параметры vim должны быть определены с помощью :setlocal (а не :set, в противном случае их определение переопределит глобальную настройку по умолчанию).

Составы определяются с помощью :n/i/v(nore)map <buffer>, а также аббревиатуры. Команды определяются с помощью опции -b. Меню не могут быть сделаны локально без помощи плагина.

local, <buffer> и -b важны для предотвращения побочных эффектов.

+0

Если вы находитесь в окнах, см. «: Help dos-locations». –

+0

+1 Я не знал, что команды могут быть определены для одного буфера! –

3

Вот как я это делаю. Ниже приведена отрывок из моего .vimrc, и я поддерживаю дополнительные настройки для каждого языка и загружаю их при загрузке нового буфера.

" HTML 
autocmd BufNewFile,BufRead *.html,*.htm,*.xhtml source ~/.vimhtml 
" XML 
autocmd BufNewFile,BufRead *.xml,*.xmi source ~/.vimxml 
" Perl 
autocmd BufNewFile,BufRead *.pl,*.pm source ~/.vimperl 

Обратите внимание, что хотя я исхожу из файла, я могу выполнить любую команду VIM или вызвать функцию. например для загрузки нового файла Java Я делаю это:

autocmd BufNewFile *.java call GeneratePackage() 

где GeneratePackage() функция VIM.

+0

autocmd FileType ... лучше, потому что вы делите обнаружение типа файла (с BufNewFile) на действия, выполняемые для этого типа файла. – joeforker

7

В дополнение к ответу rangerchris вы можете рассмотреть возможность использования modelines. ModeLines сказать редактор, как настроить себя:

#!/usr/bin/perl 
# vi: ts=4 sw=4 ht=4 et textwidth=76 : 

use strict; 
use warnings; 

print "hello world\n"; 

Это режимная говорит VI использовать 4 вкладки символов и автоотступ использовать пробелы вместо вкладок, и что он должен вставить символ новой строки, когда курсор попадает до 76 символов.

Вы можете контролировать то, как Vim читает с двумя режимы, переменными (скорее всего, установленных в вашем .vimrc):

set modeline 
set modelines=5 

Переменная modeline говорит Vim искать ModeLines, если он установлен. Переменная modelines сообщает Vim, сколько строк сверху и снизу сканирует поиск модели (в этом случае он найдет модельный, если он находится в первой или последней пяти строках файла).

Как и любая система, которая берет инструкции из ненадежных источников, моделирование может быть security threat, поэтому пользователь root никогда не должен использовать моделирование, и вы должны постоянно обновлять свою копию Vim.

Настоящая выгода для моделирования заключается в том, что они предназначены для каждого файла. Большинство людей Perl - это четыре пространства в качестве отступов, но я человек с восьмью символами. Когда я работаю с кодом других людей, я использую модель, которая отражает их использование. В остальное время я использую свои собственные.