Вот так мой vim выглядит (пишу небольшой эмулятор микропроцессора):
Vim умеет, кроме всего прочего, следующие вещи:
- Проверка орфографии для русского языка (с помощью aspell)
- Работа с ctags (навигация по классам/функциям/макросам открытых файлов с исходным кодом) через удобное окно (плагин taglist.vim - с корректной установкой документации для этого плагина пришлось повозиться - я изменил taglist.txt на taglist2.txt и проделал то же внутри файла (первая строка))
- Работа с метками с помощью вспомогательной панели (плагин showmarks.vim)
- Удобное автодополнение (плагин supertab.vim)
- Работа с X-вым буфером обмена и буфером обмена gpm'а (средняя кнопка мыши)
- Подсветка синтаксиса для огромного количества языком и конфигов (даже мой любимый erlang не забыли)
- Метки - локальные и глобальные
- Механизм сессий (тьфу, меня аж покоробило)
- ...
** Немного в сторону - aspell и настроенная в нем поддержка русского языка моментально делает жизнь в KDE намного приятнее. Хоты бы в kmail или kopete
Для начала - мой vimrc:
" Кодировка скрипта - utf-8
scriptencoding utf-8
"Отключаем режим совместимости с vi
set nocompatible
" Отключаем backup'ы
set nobackup
" При поиске - игнорировать регистр
set ic
" Нумерация строк
set nu
" Не выгружать буфер при переходе на другой файл
set hidden
" Умолчательная кодировка
set termencoding=utf-8
" do incremental searching
set incsearch
" keep 50 lines of command line history
set history=50
" show the cursor position all the time
set ruler
" display incomplete commands
set showcmd
" Время обновления окна = 0 миллисекунд (делаем из vim "редактор реального времени")
set updatetime=0
" Отключение звукового сигнала (на всякий случай - системный динамик у меня всегда отключен уже в ядре)
set novisualbell
" Кое-какие автозамены
iabbrev ### ############################################################################
iabbrev --- ----------------------------------------------------------------------------
" Автовставка моих копирайтов
com AMV call amv#amv_copyright()
com VERZHAK call amv#verzhak_copyright()
com GPLv3 call amv#gplv3()
map :call amv#amv_copyright()
map :call amv#verzhak_copyright()
map :call amv#gplv3()
" Проверка орфографии
" - включить/выключить проверку
map :call amv#toggle_spell()
" Убрать из режима вставки
" (Теперь будет вставляться )
imap < F1>
" Копирование/вставка в/из буфер обмена X
" (этот буфер называется +)
map "+y
map "+p
" Автозавершение скобок
imap { {}O
imap [ []
imap ( ()
" Отключаем детей Уганды
set shortmess+=I
" statusline
set laststatus=2
" Первый вариант statusline
" set statusline=%<%f\ -\ Буффер:\ %2n[%M%R%W]\ \|\ Под\ курсором\ -\ %3b[0x%2B]\ \|\ Строка\ -\ %5l[%3p%%]\ Колонка\ -\ %2c
" Второй вариант statusline (рабочий)
set statusline=%<%f\ -\ Буффер:\ %2n[%M%R%W]\ \|\ Строка\ -\ %5l[%3p%%]\ Колонка\ -\ %2c\ \|\ %{Tlist_Get_Tagname_By_Line()}
" Исправление отступов после вставки gpm'ом (и т.п.)
inoremap u:set paste.:set nopastegi
" Найти ту-ду во всех неудаленных буферах
com TODO call amv#is_have_string_in_buffer("TODO")
map :TODO
" Открыть все файлы из текущей папки
com OpenAll call amv#open_all()
" Вывести список всех локльных/глобальных/локальных_и_глобальных отметок
" (Интересно, можно ли сделать проще?)
com LM marks qazxswedcvfrtgbnhyujmkiolp
com GM marks QAZXSWEDCVFRTGBNHYUJMKIOLP
com AM marks qazxswedcvfrtgbnhyujmkiolpQAZXSWEDCVFRTGBNHYUJMKIOLP
com LMarks LM
com GMarks GM
com AMarks AM
" Быстрое сохранение сессии
map :mks!
" Открыть окно тегов по
nnoremap :TlistToggle
" Окно тегов не открывается автоматически
let Tlist_Auto_Open=0
" Если кроме окна тегов более не открыто ни одного окна - покинуть vim
let Tlist_Exit_OnlyWindow=1
" Окно тегов располагается справа
let Tlist_Use_Right_Window=1
" Отображать панель с marks по умолчанию (plugin/showmarks.vim)
let showmarks_enable=1
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Поддержка мыши
set mouse=a
set mousemodel=popup
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Подсветка синтаксиса
" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
syntax on
set hlsearch
endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Отступы - если автокоманды поддерживаются, то одним способом, иначе - другим
" Only do this part when compiled with support for autocommands.
if has("autocmd")
" Enable file type detection.
" Use the default filetype settings, so that mail gets 'tw' set to 72,
" 'cindent' is on in C files, etc.
" Also load indent files, to automatically do language-dependent indenting.
filetype plugin indent on
" Put these in an autocmd group, so that we can delete them easily.
augroup vimrcEx
au!
" For all text files set 'textwidth' to 78 characters.
autocmd FileType text setlocal textwidth=78
" When editing a file, always jump to the last known cursor position.
" Don't do it when the position is invalid or when inside an event handler
" (happens when dropping a file on gvim).
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
augroup END
else
set autoindent " always set autoindenting on
endif " has("autocmd")
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Кое-что еще (разные другие настройки из vimrc.orig, которые я не стал удалять)
" allow backspacing over everything in insert mode
set backspace=indent,eol,start
" Don't use Ex mode, use Q for formatting
map Q gq
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
amv.vim
Кроме разнообразных чужих плагинов у меня есть один самопальный - собственно, в него я складирую все свои функции (amv.vim лежит в ~/.vim/plugin). Вот его содержимое:
" Открыть все файлы из текущей папки
" Не спускаясь при этом рекурсивно в папки (!)
function amv#open_all()
         let fl = split(system("ls"),'\n')
         for x in fl
                 exe "new ".x
         endfor
         bfirst
         only
         ls
endf
" Данная функция проверяет все существующие (неудаленные) буферы на
" нахождение в них подстроки из str
function amv#is_have_string_in_buffer(str)
         for bf in range(1,bufnr("$"))
                 let name = bufname(bf)
                 let num = 0
                 let sp = []
                 if bufloaded(bf)
                         let sp = getbufline(bf,1,"$")
                 else
                         if buflisted(bf) && filereadable(name)
                                 let sp = readfile(name)
                         endif
                 endif
                 for x in sp
                         if match(x,a:str) > -1
                                 let num = num + 1
                         endif
                 endfor
                 if num > 0
                         echo "Buffer: ".bf." (file ".name.") содержит ".a:str." ".num." раз(а)"
                 endif
         endfor
endf
" Toggle проверку орфографии
function amv#toggle_spell()
         if &spelllang == "ru"
                 set nospell spelllang=
         else
                 set spell spelllang=ru
         endif
endf
function amv#amv_copyright()
         a
         " Здесь мой копирайт для amv
.
endf
function amv#verzhak_copyright()
         a
         " Здесь мой копирайт для verzhak
.
endf
function amv#gplv3()
         a
         " Здесь лежит GPLv3
.
endf
Собственно, vim содержит в себе мощный язык программирования, способный автоматизировать не только эти - примитивные - действия. Кстати, vim поддерживает возможность написания plugin'ов для себя на других яп - c, python, ruby.
3 комментария:
Да VIM хорош, почти как emacs ;)
а у вас ус отклеился!
как правильно вставлять код в блоггер можете почитать у меня в блоге, как раз для виммеров совет.
It is very interesting for me to read the blog. Thank you for it. I like such topics and anything connected to them. I definitely want to read more on that blog soon.
Alex
Mobile phone blockers
Отправить комментарий