GVim и несколько языков программирования

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

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

Ответ 1

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

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

Ответ 2

В своем $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 важны для предотвращения побочных эффектов.

Ответ 3

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

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

use strict;
use warnings;

print "hello world\n";

Этот modeline сообщает vi, чтобы использовать 4 символьные вкладки и автоопределения, использовать пробелы вместо вкладок и чтобы он вставлял новую строку, когда курсор получает до 76 символов.

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

set modeline
set modelines=5

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

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

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

Ответ 4

Вот как я это делаю. Ниже приведен фрагмент моего .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.