1

Раньше, на старом форуме, в этом разделе была тема, посвященная использованию редактора Vim - vim tips and tricks, вопросы пользователей и т.п. Предлагаю в этой теме заниматься тем же самым.
Для затравки выкладываю свой конфиг .vimrc:

" просматриваем ман-страницы в отдельном окне vim'a с подсвечиванием и т.п.
" Эта директива должна быть в начале файла .vimrc, иначе она перезапишет
" остальные настройки.
"-------------------------------------------------------------------------
" :Man man
"-------------------------------------------------------------------------
" Local mappings:
" CTRL-] Jump to the manual page for the word under the cursor.
" CTRL-T Jump back to the previous manual page.
"
:runtime! ftplugin/man.vim

set nobackup                            "не создавать файлы с резервной копией"
set history=50                          "сохранять 50 строк в истории командной строки
set ruler                               "постоянно показывать позицию курсора
set showcmd                             "показывать незавершенные команды
set incsearch                           "показывать первое совпадение при наборе шаблона
set nohlsearch                          "подсветка найденного
set mouse=a                             "используем мышку
set autoindent
set smartindent
set ai                                  "при начале новой строки, отступ копируется из предыдущей
set ignorecase                          "игнорируем регистр символов при поиске
set background=dark                     "фон терминала - темный
set ttyfast                             "коннект с терминалом быстрый
set visualbell                          "мигаем вместо писка
set showmatch                           "показываем соответствующие скобки
set shortmess+=tToOI                    "убираем заставку при старте
set rulerformat=%{strftime(\"%H:%M\ \")}%(%l,%c\ %p%%%) "формат строки состояния
set wrap                                "не разрывать строку
set linebreak                           "разрываем строку только между словами
set tabstop=4                           "размер табуляции
set shiftwidth=4                        "число пробелов, используемых при автоотступе
set expandtab                           "Заменяем табуляции пробелами (use :retab dude)
set t_Co=256                            "включаем поддержку 256 цветов
set wildmenu                            "красивое автодополнение
set wcm=<Tab>                           "?
set makeprg=make                        "программа для сборки - make
set whichwrap=<,>,[,],h,l               "не останавливаться курсору на конце строки
set autowrite                           "автоматом записывать изменения в файл при переходе
                                        "к другому файлу
set encoding=utf8
set termencoding=utf8                   "Кодировка вывода на терминал
set fileencodings=utf8,cp1251,koi8r     "Возможные кодировки файлов
set showcmd showmode                    "показывать незавершенные команды
set splitbelow                          "новое окно появляется снизу
set autochdir                           "текущий каталог всегда совпадает с содержимым активного окна
set stal=2                              "постоянно выводим строку с табами
set tpm=100                             "максимальное количество открытых табов
set wak=yes                             "используем ALT как обычно, а не для вызова пункта мени
set ar                                  "перечитываем файл, если он изменился извне
set dir=~/.vim/swapfiles                "каталог для сохранения своп-файлов
set noex                                "не читаем файл конфигурации из текущей директории
set ssop+=resize                        "сохраняем в сессии размер окон Vim'а
set complete+=""                        "настраиваем complete options
set complete+=.
set complete+=w
set complete+=b
set complete+=u
set complete+=i
set complete+=t
set completeopt=menuone,longest         "показываем меню автодополнения, если есть только одно автодополнение
set list                                "Отображаем табуляции и начальные пробелы
set listchars=tab:⋅⋅,trail:⋅,nbsp:⋅

colorscheme baycomb

if has ("gui_running")
    "если запущен GUI интерфейс:
    "распахиваем окно на весь экран
    "set lines=99999 columns=99999
    "убираем меню и тулбар
    set guioptions-=m
    set guioptions-=T
    "убираем скроллбары
    set guioptions-=r
    set guioptions-=l
    "используем консольные диалоги вместо графических
    set guioptions+=c
    "антиалиасинг для шревтоф
    set antialias
    "прячем курсор
    set mousehide
    "Так не выводятся ненужные escape последовательности в :shell
    set noguipty

    colorscheme darkspectrum "используем эту цветовую схему
endif

"Don't use Ex mode, use Q for formatting
map Q gq

syntax on                               "включаем подсветку синтаксиса

filetype plugin indent on               "включаем автообнаружение типа файла

autocmd FileType text setlocal textwidth=80 "устанавливаем ширину в 80 знаков для текстовых файлов
au FileType c,cc,cpp,h,hpp au BufWinEnter * let w:m1=matchadd('ErrorMsg', '\%>80v.\+', -1) "Подсвечиваем 81 символ и т.д.

"При редактировании файла всегда переходить на последнюю известную
"позицию курсора. Если позиция ошибочная - не переходим.
autocmd BufReadPost *
  \ if line("'\"") > 0 && line("'\"") <= line("$") |
  \   exe "normal! g`\"" |
  \ endif

" используем удобное omnicompletion
" http://vim.wikia.com/wiki/C%2B%2B_code_completion
"set tags+=~/.vim/tags/cpp                     " Где лежат списки для автозаполнения
"set tags+=~/.vim/tags/qt4
set tags+=~/.vim/tags/csystags

let OmniCpp_NamespaceSearch = 1               " Еще какие-то опции
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_MayCompleteDot = 1
let OmniCpp_MayCompleteArrow = 1
let OmniCpp_MayCompleteScope = 1
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]

autocmd CursorMovedI * if pumvisible() == 0|pclose|endif     " Автоматически открывать и закрывать
autocmd InsertLeave * if pumvisible() == 0|pclose|endif      " всплывающие меню и предыдущие окна



" Несколько удобных биндингов для С\С++
au FileType c,cc,cpp,h,hpp inoremap { {<CR>}<Esc>O
au FileType c,cc,cpp,h,hpp inoremap #m int main(int argc, char * argv[]) {<CR>return 0;<CR>}<CR><Esc>2kO
au FileType c,cc,cpp,h,hpp inoremap #d #define 
au FileType c,cc,cpp,h,hpp inoremap #e #endif /*  */<Esc>hhi
au FileType c,cc,cpp,h,hpp inoremap #" #include ""<Esc>i
au FileType c,cc,cpp,h,hpp inoremap #< #include <><Esc>i
au FileType c,cc,cpp,h,hpp inoremap #f /* FIXME:  */<Esc>hhi
au FileType c,cc,cpp,h,hpp inoremap #t /*TODO:  */<Esc>hhi
au FileType c,cc,cpp,h,hpp inoremap ;; <END>;<CR>
au FileType c,cc,cpp,h,hpp inoremap " ""<Left>
au FileType c,cc,cpp,h,hpp inoremap ' ''<Left>
au FileType c,cc,cpp,h,hpp inoremap ( ()<Left>
"                            Like as NetBeans
au FileType c,cc,cpp,h,hpp inoremap (; ();<CR>
au FileType c,cc,cpp,h,hpp inoremap ({ () {<CR>}<Esc>O
au FileType c,cc,cpp,h,hpp inoremap [ []<Left>
au FileType c,cc,cpp,h,hpp inoremap /* /*  */<Esc>3ha
" Биндинги для LaTeX
au FileType tex inoremap %- %---------------------------------------------------------------------------<CR>
au FileType tex inoremap %= %===========================================================================<CR>
au FileType tex inoremap { {}<Left>
au FileType tex inoremap \bei \begin{itemize}<CR>
au FileType tex inoremap \ei \end{itemize}<CR>
au FileType tex inoremap \bee \begin{enumerate}<CR>
au FileType tex inoremap \ee \end{enumerate}<CR>
au FileType tex inoremap \it \item 

let &errorformat="%f:%l:%c: %t%*[^:]:%m,%f:%l: %t%*[^:]:%m," . &errorformat " формат строки с ошибкой для gcc

" Некоторые настройки для плагина TagList
let g:Tlist_Show_One_File=1                         " показывать информацию только по одному файлу
let g:Tlist_GainFocus_On_ToggleOpen=1               " получать фокус при открытии
let g:Tlist_Compact_Format=1
let g:Tlist_Close_On_Select=1                       " закрывать окно после выбора тега
let g:Tlist_Auto_Highlight_Tag=1                    " подсвечивать тег, на котором сейчас находимся

"----------------------------------------------------------------------------------------------"
"                                      KEY BINDINGS                                            "
"----------------------------------------------------------------------------------------------"

" Close sth without saving 
map <Esc><Esc> :q!<CR>

" Auto adding by Tab (use Shift-TAB unstead)
imap <Tab> <C-N>

" make ctags
map <C-c>c :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

" Открытие\закрытие новой вкладки
imap <C-t> <Esc>:tabnew<CR>a
nmap <C-t> :tabnew<CR>

" сохранить сессию в указанный файл
map <C-k> :mksession! ~/.vim/lastSession.vim<CR>
" восстановить ее из файла
map <C-l> :source ~/.vim/lastSession.vim<CR>

" Так получим более полную информацию
map <C-g> g<C-g>

" показать\спрятать номера строк
imap <C-c>n <Esc>:set<Space>nu!<CR>a
nmap <C-c>n :set<Space>nu!<CR>

" Выводим красиво оформленную man-страницу прямо в Vim
" в отдельном окне (см. начало этого файла)
nmap <S-k> :exe ":Man " expand("<cword>")<CR>

" Запуск проверки правописания
menu Spl.next ]s
menu Spl.prev [s
menu Spl.word_good zg
menu Spl.word_wrong zw
menu Spl.word_ignore zG
imap <C-c>s <Esc>:setlocal spell spelllang=ru,en<CR>a
nmap <C-c>s :setlocal spell spelllang=ru,en<CR>
imap <C-c>ss <Esc>:setlocal spell spelllang=<CR>a
nmap <C-c>ss :setlocal spell spelllang=<CR>
map  <C-c>sm :emenu Spl.<TAB>

" добавим 'шапку' в начало файла
au FileType c,cc,cpp,h,hpp map <C-c>h :exe "normal! i/* File: ".bufname("%")<CR>:exe "read !LC_TIME='us' date +\"* Created: \\%d \\%b, \\%Y\""<CR>:exe "normal oLicense: GNU GPLv3 "<CR>:exe "normal! oAuthor: h0rr0rr_drag0n "<CR>:exe "normal! oDescription: "<CR>:exe "normal! o/"<CR>kA

" Compile program using Makefile
au FileType c,cc,cpp,h,hpp,s imap <C-c>m <Esc>:make!<CR>a
au FileType c,cc,cpp,h,hpp,s nmap <C-c>m :make!<CR>
" Use LaTeX to compile LaTeX sources
au FileType tex map <C-c>m :!pdflatex -shell-escape "%"<CR>

" List of errors
imap <C-c>l <Esc>:copen<CR>
nmap <C-c>l :copen<CR>

" Запуск дебаггера
imap <C-c>d <Esc>:!~/.vim/gdb.sh<CR>
nmap <C-c>d :!~/.vim/gdb.sh<CR>

" Work with vim-projects
nmap <silent> <C-c>p <Plug>ToggleProject

" work with taglist
imap <C-c>t <Esc>:TlistToggle<CR>:TlistUpdate<CR>
nmap <C-c>t :TlistToggle<CR>:TlistUpdate<CR>

" Create new project
menu NewProj.C++ :!cp -r ~/.vim/mproj/c++/* .<CR>:e ./src/main.cpp<CR>
menu NewProj.C :!cp -r ~/.vim/mproj/c/* .<CR>:e ./main.c<CR>
menu NewProj.LaTeX :!cp -r ~/.vim/mproj/latex/* .<CR>:e ./report.tex<CR>
map <C-c>np :emenu NewProj.<TAB>

Также рекомендую блог о Vim'е на велинуксе: http://welinux.ru/blog/45, думаю каждый найдет там немало интересного.

Человечество было сформировано не императорами, жрецами, полководцами, а теми, кто создал топор, колесо, самолёт, кто нашёл злаки, следил за звёздами, кто открыл железо, полупроводники, радиоволны.
Гранин

2

Подсказки по VIM

# поиск
/joe/e                      : курсор устанавливается в конец найденного
/joe/e+1                    : курсор устанавливается в конец найденного + 1 символ
/joe/s-2                    : курсор устанавливается в начало найденного - 2 символа
/^joe.*fred.*bill/          : обычный поиск
/^[A-J]\+/                  : найти строки, начинающиеся с одного или более A-J
/begin\_.*end               : поиск чего-нить многострочного. (begin на одной строке,
                            : end может быть на другой).
/fred\_s*joe/i              : любые пробельные символы, включая возврат каретки.
/fred\|joe                  : найти FRED или JOE
/\([^0-9]\|^\)%.*%          : найти содержимое между %, в строке не начинающейся с цифр и %
                            : не первый символ.
/.*fred\&.*joe              : найти FRED и JOE в любом порядке следования!
/\<fred\>/i                 : найти fred но не alfred или frederick
/\<\d\d\d\d\>               : найти числа, состоящие только из 4 цифр
/\D\d\d\d\d\D               : найти числа, состоящие только из 4 цифр
/\<\d\{4}\>                 : тоже самое



# поиск пустых строк
/^\n\{3}                    : найти 3 пустых строки
# указать, что ты НЕ ищещь (гласные) 
/\c\v([^aeiou]&\a){4}       : искать 4 последовательные согласные
# использование запомненных подстановок в regexp-поиске
/\(fred\).*\(joe\).*\2.*\1
# повторение Regexp'а (а не того, что он найдет)
/^\([^,]*,\)\{8}
# визуальный поиск
:vmap // y/<C-R>"<CR>       : найти визуально выделенный текст
:vmap <silent> //    y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> : со специальными символами


# многострочный поиск \_ значит - включая возврат каретки
/<!--\_p\{-}-->                   : поиск многострочного комментария
/fred\_s*joe/i                    : любые пробелы, включая возврат каретки
/bugs\(\_.\)*bunny                : bugs затем bunny в любом месте файла
:h \_                             : помощь
# поиск объявлений процедур/функций под курсором
:nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>
# многофайловый поиск
:bufdo /searchstr
:argdo /searchstr


# как найти URL без обратной косой черты
?http://www.vim.org/        : поиск НАЗАД!!! правда клева?!
----------------------------------------
# подстановки
:%s/fred/joe/igc            : общая команда подстановки
:%s/\r//g                   : удалить DOS'овские возвраты каретки ^M
:%s/\r/\r/g                 : превратить DOS'овские возвраты каретки ^M в настоящие
:%s=  *$==                  : удалить пробелы после строк
:%s= \+$==                  : тоже самое
:%s#\s*\r\?$##              : удалить замыкающие пробелы и DOS'кие возвраты кареток
:%s#\s*\r*$##               : таже фигня
# удаление пустых строк
:%s/^\n\{3}//               : удалить блоки из 3-х пустых строк
:%s/^\n\+/\r/               : сжать пустые строки
# ЕСЛИ ВЫ ТОЛЬКО ХОТИТЕ ЗНАТЬ ОДНУ ВЕЩЬ 
:'a,'bg/fred/s/dick/joe/igc : ОЧЕНЬ ПОЛЕЗНО


# дублирование колонок
:%s= [^ ]\+$=&&=            : дублировать последнюю колонку
:%s= \f\+$=&&=              : тоже самое
:%s= \S\+$=&&               : тоже самое
# память
:s/\(.*\):\(.*\)/\2 : \1/   : поменять местами поля, разделенные :
:%s/^\(.*\)\n\1/\1$/        : удалить одинаковые строки
# не жадный поиск \{-}
:%s/^.\{-}pdf/new.pdf/      : удалить только до первого pdf
# использование многострочной подстановки
:%s/<!--\_.\{-}-->//        : удалить многострочный комментарий
:help /\{-}                 : помощь по не жадному поиску


# подстановка, используя регистр
:s/fred/<c-r>a/g            : заменить "fred" содержимым регистра "a"
:s/fred/\=@a/g              : лучшая альтернатива - регистр не показывается
# множество команд на одной строке
:%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/
# вызов VIM функции

:s/__date__/\=strftime("%c")/ : вставить дату
# работа с колонками. заменить любую str1 в col3
:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
# поменять местами 1 и последнюю колонки (4 колонки)
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
# увеличить любые числа на 6 на определенных строках
:g/loc\|function/s/\d/\=submatch(0)+6/
# а лучше так
:%s#txtdev\zs\d#\=submatch(0)+1#g
:h /\zs
# найти заменяемый текст, запомнить, затем использовать \zs, чтобы упростить подстановку

:%s/"\([^.]\+\).*\zsxx/\1/
----------------------------------------
# глобальная комманда просмотра
:g/fred.*joe.*dick/         : показать все строки с fred,joe и dick
:g/\<fred\>/                : показать все строки с fred но не с freddy
:g/<pattern>/z#.5           : показать с контекстом
:g/<pattern>/z#.5|echo "=========="  : показать красиво
:g/^\s*$/d                  : удалить все пустые строки
:g/fred/,/joe/d             : не зависит от строк (очень мощная фигня)
:g/{/ ,/}/- s/\n\+/\r/g     : удалить пустые строки, но только между {...}
:v/./.,/./-1join            : сжать пустые строки
:g/^$/,/./-j                : сжать пустые строки
:g/<input\|<form/p          : использование \| (или)
:g/^/pu _                   : вставить после каждой строки пустую (pu = put)
:g/^/m0                     : обратить файл (m = move)
:g/fred/t$                  : копировать строки, содержащие fred в EOF
:g/stage/t'a                : копировать строки, содержащие stage в маркер a
:%norm jdd                  : удалить каждую следующую строку

# увеличение чисел

:.,$g/^\d/exe "norm! \<c-a>": увеличение чисел
:'a,'bg/\d\+/norm! ^A       : увеличение чисел
# сохранение глобальных результатов (должны использовать APPEND)
:g/fred/y A                 : добавить все строки с fred в регистр a
:'a,'b g/^Error/ . w >> errors.txt
# сдублировать каждую строку в файле и каждый дубликат окружить ''

:g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
----------------------------------------

# глобальные команды объединенные с подстановкой (мощное редктирование)
:'a,'bg/fred/s/joe/susan/gic :  можно использовать память, чтоб продлить поиск подстановок (муть какая-то)
:g/fred/,/joe/s/fred/joe/gic :  не базирующееся на строках (???) (ultra)
----------------------------------------
# найти fred до начала поиска joe
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
----------------------------------------
# Совершенно необходимое
----------------------------------------
* # g* g#           : найти слово под курсором (<cword>) (вперед/назад)

%                   : найти соответствующую открывающую/закрывающую скобку {}[]()
.                   : повторить последнее изменение
matchit.vim         : % теперь ищет соответствующие открывающие/закрывающие тэги <tr><td><script> <?php и т.д.

<C-N><C-P>          : завершение слова в режиме insert
<C-X><C-L>          : завершение строки SUPER полезно
/<C-R><C-W>         : вытащить <cword>(слово под курсором) в поисковую или командную строку
/<C-R><C-A>         : вытащить <CWORD> в поисковую или командную строку
:set ignorecase     : практически всегда необходима
:syntax on          : включение подсветки синтаксиса
:h regexp<C-D>      : нажми control-D и получи список всех тем помощи, содержащих
                      регулярные выражения (жми TAB чтоб перемещаться по списку)
----------------------------------------


# сделать простым обновление/перезагрузку _vimrc
:nmap ,s :source $VIM/_vimrc
:nmap ,v :e $VIM/_vimrc
----------------------------------------
# визуальный режим (просто добавить другие HTML тэги)
:vmap sb "zdi<b><C-R>z</b><ESC>  : добавить <b></b> вокруг ВИЗУАЛЬНО выбранного текста
:vmap st "zdi<?= <C-R>z ?><ESC>  : добавить <?=   ?> вокруг ВИЗУАЛЬНО выбранного текста
----------------------------------------


# Exploring - не буду переводить ;)
:Exp(lore)                      : file explorer заметьте заглавную E
:Sex(plore)                     : file explorer в разделенном окне
:ls                             : список буферов
:cd ..                          : перейти в родительский каталог
:args                           : список файлов
:lcd %:p:h                      : перейти в каталог текущего файла
:autocmd BufEnter * lcd %:p:h   : переходить в каталог текущего файла автоматически (положить в _vimrc)
----------------------------------------
# смена регистра букв
guu                             : перевести строку в нижний регистр
gUU                             : перевести строку в верхний регистр
Vu                              : перевести строку в нижний регистр
VU                              : перевести строку в верхний регистр
g~~                             : поменять регистр строки
vEU                             : перевести слово в верхний регистр
vE~                             : поменять регистр слова
ggguG                           : перевести весь файл в нижний регистр
# перевести в верхний регистр первую букву предложения 
:%s/[.!?]\_s\+\a/\U&\E/g
----------------------------------------
gf                              : открыть файл, имя которого под курсором (SUPER)
ga                              : показать hex,ascii значение символа под курсором
ggVGg?                          : применить rot13 ко всему файлу
ggg?G                           : применить rot13 ко всему файлу (быстрее для больших файлов)
<C-A>,<C-X>                     : увеличить, уменьшить число под курсором
<C-R>=5*5                       : вставить число 25 в текст (мини-калькулятор)
----------------------------------------


# делает все подсказки ненужными
:h 42            : также http://www.google.com/search?q=42
:h holy-grail
:h!
----------------------------------------
# о маркерах и передвижениях
'.               : перейти к строке последнего изменения (SUPER)
`.               : перейти к месту последнего изменения
g;               : переход по всем последним изменениям (старые в начале) (появилось в vim6.3)
g,               : изменено направление перехода (появилось в vim6.3)
:changes
:h changelist    : помощь по тому, что выше
:ju(mps)         : список перемещений
:help jump-motions
:history         : список всех  твоих команд
:his c           : история командной строки
:his s           : история поиска
q/               : окно поиска в истории ;)
q:               : окно истории командной строки
:<C-F>           : окно истории
----------------------------------------
# аббревиатуры и маппинг
:map   <f7>   :'a,'bw! c:/aaa/x
:map   <f8>   :r c:/aaa/x
:map   <f11>  :.w! c:/aaa/xr<CR>

:map   <f12>  :r c:/aaa/xr<CR>
:ab php          : список аббревиатур, начинающихся с php
:map ,           : список всех аббревиатур, начинающихся с ,
# разрешает использовать F10 для маппинга (win32)
set wak=no       : :h winaltkeys
# для использования в маппингах
<CR>             : возврат каретки для маппинга
<ESC>            : Escape


<LEADER>         : обычно \
<BAR>            : |
<BACKSPACE>      : backspace
#показать цвет RGB под курсором, напр. #445588
:nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>

----------------------------------------
# использование регистров в маппинге (можно предварительно загрузить в _vimrc)
:let @m=":'a,'bs/"
:let @s=":%!sort -u"
----------------------------------------
# список регистров
:reg             : показать содержимое всех регистров
:reg a           : показать содержимое индивидуального регистра
"1p....          : получить содержимое числовых регистров один за другим (?)
:let @y='yy@"'   : предварительная загрузка регистров (положите в _vimrc)
----------------------------------------


# полезные трюки
"ayy@a           : выполнить "команду Vim" в текстовом файле
yy@"             : то же самое, используя безымянный регистр
u@.              : выполнить команду, введенную только что
----------------------------------------
# получить вывод из других команд (необходимы внешние программы)
:r!ls.exe        : читает вывод команды ls
!!date           : то же самое(только заменяет/фильтрует текущую строку)
# сортировка при помощи внешней sort
:%!sort -u       : использование внешней программы для фильтрации содержимого
:'a,'b!sort -u   : использование внешней программы для фильтрации содержимого
!1} sort -u      : сортировка параграфа (обрати внимание: режим normal!!)
----------------------------------------
# управление множеством файлов

:bn              : перейти к следующему буферу
:bp              : перейте к предыдущему буферу
:wn              : сохранить файл и перейти к следующему (super)
:wp              : сохранить файл и перейти к предыдущему
:bd              : удалить файл из списка буферов (super)
:bun             : выгрузить буфер (удалить окно но не из списка буферов)
:badd file.c     : файл из списка буферов
:b 3             : перейти к буферу 3
:b main          : перейти к буферу с main в имени, например, main.c (ultra)
:sav php.html    : сохранить текущий файл как php.html
:sav! %<.bak     : сохранить текущий файл с другим расширением
:sav! %:r.cfm    : сохранить текущий файл с другим расширением
:e!              : вернуться к немодифицированному файлу
:w c:/aaa/%      : сохранить файл где хошь
:e #             : редактировать альернативный файл
:sp fred.txt     : открыть fred.txt в разделенном окне
:sball,:sb       : все буфера в разделенных окнах (super)
:scrollbind      : в каждом разделенном окне
:map   <F5> :ls<CR>:e # : нажатие F5 выдает список всех буферов, просто напишите номер
:set hidden      : позволяет изменять буфер без сохранения текущего буфера
----------------------------------------
# быстрый переход между разделенными окнами
map <C-J> <C-W>j<C-W>_
map <C-K> <C-W>k<C-W>_
----------------------------------------


# запись макросов (ЛУЧШИЕ ПОДСКАЗКИ ИЗ ВСЕХ)
qq  # записать в q
твои сложные последоватеьлности команд
q   # конец записи
@q выполнить макрос
@@ повторить последний выполненный макрос
5@@ повторить 5 раз
# редактирование регистра/макроса
"qp                               : показать содержимое регистра q (режим normal)
<ctrl-R>q                         : показать содержимое регистра q (режим insert)
# вызов макроса для Визуального блока
1) определи макрос
qq:s/ to/ from/g^Mq
2) выдели визуальный блок
V}
3) нажми : и появится следующая фигня
:'<,'>

4) закончи следующим образом
:'<,'>norm @q
----------------------------------------
# Визуальный режим
v                               : войти в визуальный режим
V                               : выделить всю строку
<C-V>                           : войти в ВИЗУАЛЬНЫЙ БЛОЧНЫЙ режим
gv                              : выделить последнее выделенное
o                               : переместиться в другой конец визуальной области
"*y                             : копировать выделенное в буфер обмена
----------------------------------------
# _vimrc основы
:set incsearch : переход к искомому слову во время печати этого слова
:set wildignore=*.o,*.obj,*.bak,*.exe : автоподстановка файлов по tab игнорирует эти файлы
:set shiftwidth=3                     : для табов
:set vb t_vb=".                       : без звука
:set browsedir=buffer                 : GUI открыть файл использует текущий каталог
----------------------------------------
# FTP из VIM

cmap ,r  :Nread ftp://209.51.134.122/public_html/index.html
cmap ,w  :Nwrite ftp://209.51.134.122/public_html/index.html
gvim ftp://209.51.134.122/public_html/index.html
----------------------------------------
# добавление в регистры (использовать БОЛЬШИЕ БУКВЫ)
# запомнить 5 строк в "a" затем добавить дальнейшие 5 строк
"a5yy
10j
"A5yy
----------------------------------------
[I     : показывает строки, совпадающие со словом под курсором (super)
----------------------------------------
# перенаправление & буфер обмена *
:redir @*                    : перенаправить команды в буфер обмена
:redir END                   : конец перенаправления
:redir >> out.txt            : перенаправить в файл


# Работа с буфером обмена
"*yy                         : скопировать в буфер обмена
"*p                          : вставить из буфера обмена
# копировать в буфер обмена (режим ex)
:'a,'by*                     : скопировать область в буфер обмена
:%y*                         : скопировать весь буфер в буфер обмена
# фильтрация не печатных символов из буфера обмена
# полезно при вставке из некоторых gui приложений
:nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
----------------------------------------


# форматирование текста
gq}                          : форматировать параграф
ggVGgq                       : форматировать весь файл
Vgq                          : текущую строку
# сделать строки длиной 70 символов, если возможно, ограничить ;
:s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g
----------------------------------------
# выполнение команд для множества файлов
:argdo %s/foo/bar/e          : выполнить на всех файлах в :args
:bufdo %s/foo/bar/e
:windo %s/foo/bar/e
:argdo exe '%!sort'|w!       : включая внешнюю команду
:bufdo /foo/
----------------------------------------
# трюки коммандной строки
gvim -h                    : помощь
ls | gvim -                : редактировать поток!!
cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " : фильтровать поток
gvim -o file1 file2        : открыть в разделенных окнах


# выполнить одну команду после открытия файла
gvim.exe -c "/main" joe.c  : открыть joe.c и перейти к "main"
# выполнить несколько команд над одним файлом
vim -c "%s/ABC/DEF/ge | update" file1.c
# выполнить несколько команд над группой файлов
vim -c "argdo %s/ABC/DEF/ge | update" *.c


# удалить блоки текста из нескольких файлов
vim -c "argdo /begin/+1,/end/-1g/^/d | update" *.c
#загрузить VIM без _vimrc и плагинов (чистый VIM)
gvim -u NONE -U NONE -N
# получить содержимое буфера обмена
gvim -c 'normal ggdG"*p' c:/aaa/xp
# напечатать буфер обмена на принтере по умолчанию

gvim -c 's/^/\=@*/|hardcopy!|q!'
----------------------------------------
# GVIM нахождение различий (офигительно)
gvim -d file1 file2        : vimdiff (сравнение файлов)
dp                         : "перенести" отличие под курсором в другой файл
do                         : "получить" отличие под курсором из другого файла
----------------------------------------
# ловушки Vim
в регулярных выражениях вы должны предварять косой чертой + (найти 1 или более)
в регулярных выражениях вы должны предварять косой чертой | (или)
в регулярных выражениях вы должны предварять косой чертой ( (группа)
в регулярных выражениях вы должны предварять косой чертой { (количество)
/fred\+/                   : совпадает с fred/freddy но не с free
/\(fred\)\{2,3}/           : иллюстрируется, что было написано выше
----------------------------------------

# \v или очень магическое (обычно) уменьшения косых черт :)

/codes\(\n\|\s\)*where  : обычный regexp
/\vcodes(\n|\s)*where   : очень магический
----------------------------------------
# вытягивание объектов в командную/поисковую строку (SUPER)
<C-R><C-W> : слово под курсором в командную/поисковую строку
<C-R><C-A> : по виду то же самое, чем отличается не понял
<C-R>-                  : вставить последний удаленный текст (меньше строки)
<C-R>[0-9a-z]           : вставить сожержимое именованного регистра

<C-R>%                  : вставиь имя файла
----------------------------------------

# работа с регистрами
:let @a=@_              : очистить регистр a
:let @a=""              : очистить регистр a
:let @*=@a              : копировать регистр в буфер обмена
map   <f11> "qyy:let @q=@q."zzz"
----------------------------------------
# помощь по помощи
:h quickref             : VIM Quick Reference Sheet (ultra)
:h tips                 : собственные подсказки Vim
:h visual<C-D><tab>     : получить список всех разделов помощи
                        : потом используйте tab, чтоб перемещаться
:h ctrl<C-D>            : помощь по всем комбинациям клавиш, использующих control
:h :r                   : помощь по командам расширенного режима
:h /\r                  : что значит \r в регулярном выражении (значит <CR> возврат каретки)
:h \\zs                 : двойная обратная косая черта, чтоб найти \zs в помощи
:h i_CTRL-R             : помощь по <C-R> в режиме insert
:h c_CTRL-R             : помощь по <C-R> в режиме command
:h v_CTRL-V             : помощь по режиму visual
:h tutor                : VIM Tutor - обучалка по нашему


<C-[>, <C-T>            : передвигаться назад и вперед в истории помощи
gvim -h                 : помощь по командной строке VIM
----------------------------------------
# где какие опции были установлены
:scriptnames            : список всех загруженных плагинов
:function               : список функций
# создать свою собственную помощь в VIM
:helptags /vim/vim63/doc  : скомпилить все *.txt файлы помощи в /doc
:help add-local-help
----------------------------------------
# запуск файла во внешней программе (напр. php)
map   <f9>   :w<CR>:!c:/php/php.exe %<CR>

map   <f2>   :w<CR>:!perl -c %<CR>
----------------------------------------
# захват вывода текущего скрипта в отдельный буфер
:new | r!perl #                   : открывает новый буфер, читает из другого
:new! x.out | r!perl #            : то же, только с именованными файлами

----------------------------------------
# вставить возврат каретки DOS
:%s/nubian/<C-V><C-M>&/g
:%s/nubian/<C-Q><C-M>&/g
:%s/nubian/^M&/g
:%s/nubian/\r&/g
----------------------------------------
# автоматически удалять окончания строк - Dos-return'ы, пробельные символы
autocmd BufRead * silent! %s/[\r \t]\+$//
autocmd BufEnter *.php :%s/[ \t\r]\+$//e
----------------------------------------
# выполнить действия над конкретным файлом или файлами конкретного типа

autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?
autocmd FileType *.pl exec('set fileformats=unix')
----------------------------------------
# получить последнюю введенную команду для копирования/вставки в текст
i<c-r>:
# получить последнюю команду поиска для копирования/вставки в текст
i<c-r>/
----------------------------------------
# больше подстановок
<C-X><C-F>                        : вставить имя файла в текущем каталоге
----------------------------------------


# замена в выделеной части текста
# выделить текст как обычно (:h visual) затем написать :s/Emacs/Vim/ etc
:'<,'>s/Emacs/Vim/g               : ПОМНИ не нужно писать '<.'>
gv                                : перевыделить последний выделенный текст(ULTRA)
----------------------------------------
# вставка номера строки в файл
:g/^/exec "s/^/".strpart(line(".")."    ", 0, 4)
:%s/^/\=strpart(line(".")."     ", 0, 5)
:%s/^/\=line('.'). ' '

----------------------------------------
# нумерация строк по вимовски =)
:set number                       : показать номера строк
:map <F12> :set number!<CR>       : показать номера строк или спрятать (туды-сюды)
:%s/^/\=strpart(line('.')."        ",0,&ts)
----------------------------------------
# редактирование в Insert mode (типа на самом деле полезно)

<C-U>                             : удалить все, что было введено в этом режиме
<C-W>                             : удалить последнее слово
<HOME><END>                       : начало/конец строки
<C-LEFTARROW><C-RIGHTARROW>       : переход по словам назад/вперед
<C-X><C-E>,<C-X><C-Y>             : скрол в insert mode
----------------------------------------


# подстановки имен файлов (например main_c.c)
:e main_<tab>                     : по табу
gf                                : открыть файл под курсором (normal mode)
main_<C-X><C-F>                   : подставить имя файла в текст (insert mode)
----------------------------------------
# преобразовать текстовый файл в HTML
:runtime! syntax/2html.vim        : преобразовать текстовый файл в html
:h 2html
----------------------------------------
# в VIM есть встроенный grep
:grep some_keyword *.c            : получить список всех с-файлов, содержащих some_keyword
:cn                               : перейти к следующему вхождению
----------------------------------------
# заставить делать подсветку для файла без расширения .pl

:set syntax=perl
# отключить подсветку синтаксиса
:set syntax off
# поменять цветовую схему (любой файл в ~vim/vim??/colors)
:colorscheme blue
----------------------------------------
:set noma (non modifiable)        : запрет изменения файла
:set ro (Read Only)               : делает файл только для чтения
----------------------------------------
# сессии (открывает пачку файлов)
gvim file1.c file2.c lib/lib.h lib/lib2.h : загрузить файлы для "сессии"
:mksession                        : создать файл сессии (по умолчанию Session.vim)
:q
gvim -S Session.vim               : загрузить все файлы из сессии
----------------------------------------
#тэги (переход по процедурам и функциям)
taglist.vim                       : популярный плагин
:Tlist                            : показать тэги (список функций)

<C-]>                             : перейти к функции под курсором
----------------------------------------

# отобразить "невидимые символы"
:set list
:h listchars
----------------------------------------
# имена файлов
:h filename-modifiers             : помощь
:w %                              : записать в текущий файл
:w %:r.cfm                        : поменять расширение файла на .cfm
:!echo %:p                        : вывести полное имя файла
:!echo %:p:h                      : вывести путь к файлу
<C-R>%                            : вставить имя файла (insert mode)
"%p                               : вставить имя файла (normal mode)
/<C-R>%                           : искать имя файла в тексте
----------------------------------------
# удаление без затирания содержимого буфера по умолчанию

"_d                               : то, что ты всегда ХОТЕЛ
"_dw                              : удалить слово (используется чОрная дыра)
----------------------------------------
# посчитать слова

g<C-G>
----------------------------------------
# пример установки своего подсвечивания синтаксиса
:syn match DoubleSpace "  "
:hi def DoubleSpace guibg=#e0e0e0
----------------------------------------
# настройка кнопок в зависимости от типа файла

:autocmd bufenter *.tex map <F1> :!latex %<CR>

:autocmd bufenter *.tex map <F2> :!xdvi -hush %<.dvi&<CR>
----------------------------------------
# чтение документов Ms-Word, нужен antiword

:autocmd BufReadPre *.doc set ro
:autocmd BufReadPre *.doc set hlsearch!
:autocmd BufReadPost *.doc %!antiword "%"
----------------------------------------
Arch Linux - просто работает!

3

2 Полезные вещи
Выбор кодировки по F8

set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set wildmenu
set wcm=<Tab>
menu Encoding.CP1251   :e ++enc=cp1251<CR>
menu Encoding.CP866    :e ++enc=cp866<CR>
menu Encoding.KOI8-U   :e ++enc=koi8-u<CR>
menu Encoding.UTF-8    :e ++enc=utf-8<CR>
map <F8> :emenu Encoding.<TAB>

Показать/Скрыть нумерацию по ^n

imap <C-n> <Esc>:set<Space>nu!<CR>a
nmap <C-n> :set<Space>nu!<CR>
Debian GNU/Linux testing/sid (2.6.32)

4

" Устанавливаем красивую цветовую схему
colorscheme desert256

" Включить подсветку синтакса
syntax on

" Включить определение типа файла
filetype on

" Включить загрузку плагинов для специфичного типа файлов
filetype plugin on

" Включаем нумерацию строк
set nu

" Выключаем авторасстановку комментариев
au FileType * setl fo-=cro

" Включить автоматическую расстановку отступов
set autoindent
set smartindent

" Размер отступов и табуляции
set shiftwidth=4
set tabstop=8
set softtabstop=4

" Использовать смесь пробелов и табуляций
set noexpandtab

" Отключаем создание файлов бекапа и свопа
set nobackup
set nowritebackup
set noswapfile

" Открыть/закрыть окно файлового обозревателя NERDTree
imap <F9> <ESC>:NERDTreeToggle<CR>
nmap <F9> :NERDTreeToggle<CR>

" Значение палитры цветов
set t_Co=256

" Подсветка текущего файла (над курсором)
let NERDTreeHighlightCursorline=1

" Перейти к следующему буферу нажатием CTRL-L (вправо)
nnoremap <C-L> :bn!<CR>

" Перейти к предыдущему буферу нажатием CTRL-H (влево)
nnoremap <C-H> :bp!<CR>

" Перейти к окну выше
nnoremap <C-K> :wincmd k<CR>

" Перейти к окну ниже
nnoremap <C-J> :wincmd j<CR>

" Запустить make вызывается нажатием F5
set makeprg=cd\ build\ &&\ make\ install
imap <F5> <ESC>:wa<CR>:make<CR>:copen<CR>
nmap <F5> :wa<CR>:make<CR>:copen<CR>

" Убрать окно ошибок (если таковые есть) нажатием F8
imap <F8> <ESC>:cclose<CR>
nmap <F8> :cclose<CR>

" Перейти к следующей ошибке
imap <F7> <ESC>:cnext<CR>
nmap <F7> :cnext<CR>

" Перейти к предыдущей ошибке
imap <F6> <ESC>:cprev<CR>
nmap <F6> :cprev<CR>

" Команда запуска (вызывается нажатием F12)
imap <F12> <ESC>:! ./demo<CR>
nmap <F12> :! ./demo<CR>

Ну в общем заточено для программиста. Для комфортной работы советую установить плагины NERDTree и minibufexplorer.

Master of Puppets, I'm pulling your strings!
Twistin' your mind and smashin' your dreams!

V0idBlog - моя страничка :)

5

Редактор Vim позволяет настраивать отображение специальных символов. Для этого необходимо внести в конфигурационный файл ~/.vimrc следующие строки.

" установить режим отображения спец-символов
  set list
" установить спец-символы
  set listchars=eol:<символ_конца_строки>,tab:<начальный_символ_табуляции><последующие_символы_табуляции>,trail:<сивол_пробела_в_конце_строки>,nbsp:<символ_неразрывного_пробела>

Таким образом можно настроить отображение следующих спец-символов: конец строки, табуляция, пробел в конце строки, неразрывный пробел.

Я использовал следующие значения:

- eol:↲ (21b2);
- tab:→→ (2192);
- trail:· (00b7);
- nbsp:↔ (2194).

Для того, чтобы иметь возможность вводить указанные мной выше символы Юникода необходимо в режиме вставки нажать Ctrl + v, затем u и затем ввести шестнадцатиричный код (я указал его в скобках).

Вот что в конечном итоге вышло.

http://funkyimg.com/u2/290/454/vim.png

Оригинал поста здесь.

6

Выбор подсветки синтаксиса по <F7>

set wildmenu
set wcm=<Tab>
menu Syntax.Pascal  :set syntax=pascal<CR>
menu Syntax.Ruby    :set syntax=ruby<CR>
menu Syntax.Vim    :set syntax=vim<CR>
menu Syntax.Bash    :set syntax=sh<CR>
map <F7> :emenu Syntax.<TAB>

Принцип ясен.

Debian GNU/Linux testing/sid (2.6.32)

подскажите,а как настроить подсветку синтаксиса,автодополнение для С++ в консольном Виме,именно в консоле а не эмуляторе консоле?
установил одну тему, тема - хороша, но когда перехожу в консоль(ctr+alt +F1) - темы нет а есть какоето безобразие(серый фон и т.д.)
да и бог с ней,с этой темой,мне нужночтобы была подсветка и автодополнение

Мочи нет боле!
Главою бил о сруб светлицы,бо буквицы сии зело многочисленны, при том тяжек труд разбирать

8

Чей_туфля? пишет:

мне нужночтобы была подсветка и автодополнение

а сама консоль-то случаем не чёрно-белая?
что пишет env?
и попробуйте

 Консоль:
echo -e "\x1b[31;1mRED\x1b[32mGREEN\x1b[0m"

Да, ещё дайте ~/.vimrc, там часто стоит проверка терминала, и включение на монохром (при некоторых условиях).

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

9

да, а писать надо грамотно:

(пробел - следующее слово с ошибкой, интер - варианты/добавить)

map    <Space>        ]s
map <Enter>        z=

if version >= 700
    "   По умолчанию проверка орфографии выключена.
    setlocal spell spelllang=
    setlocal nospell
    function ChangeSpellLang()
        if &spelllang =~ "en_us"
            setlocal spell spelllang=ru
            echo "spelllang: ru"
        elseif &spelllang =~ "ru"
            setlocal spell spelllang=
            setlocal nospell
            echo "spelllang: off"
        else
            setlocal spell spelllang=en_us
            echo "spelllang: en"
        endif
    endfunc

    " map spell on/off for English/Russian
    map  <S-F12> :call ChangeSpellLang()<CR>
endif
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

10 (25.12.2010 13:22:44 отредактировано drBatty)

Чей_туфля? пишет:

и автодополнение

что с автодополнением?
CTRL+N след. совпадение
CTRL+P прошлое совпадение

CTRL+X
F имя файла
L строка
D макрос
I текущий или вкл. файл
K слово из словаря
T слово из тезауруса
] таг
V командная строка Vim

У меня вообще как в MSVC - контекстное меню.

Что ещё нужно?

PS:
:h completion

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

Начал переезжать на vim. От непривычки нужна одна маленькая функция и я ее ни как не могу найти. Нужно прокручивать построчно текст ( как в шеле CTRL+SHIFT+UP(DOWN) ). Можно конечно прокручивать скроллом мыши, но это ж vim   smile   хочется клавиатурный аналог. Помогите найти, или написать скрипт, а то я еще не вникал в vimscript. буду благодарен.

12 (12.01.2011 14:58:28 отредактировано i2ks)

BreatheInTheVoid пишет:

Начал переезжать на vim. От непривычки нужна одна маленькая функция и я ее ни как не могу найти. Нужно прокручивать построчно текст ( как в шеле CTRL+SHIFT+UP(DOWN) ). Можно конечно прокручивать скроллом мыши, но это ж vim   smile   хочется клавиатурный аналог. Помогите найти, или написать скрипт, а то я еще не вникал в vimscript. буду благодарен.

Прокрутка
^f     Прокрутка экрана вперед на полное окно. Откры- вается новое окно с текстом, расположенным ниже текущего окна
^d     Прокрутка текста вниз на пол-окна. Открываются строки, расположенные ниже текущего окна
^b     Прокрутка экрана назад на полное окно. Откры- вается новое окно с текстом, расположенным выше текущего окна
^d     Прокрутка текста вверх на пол-окна. Открываются строки, расположенные выше текущего окна

оно?

а так:
http://vimdoc.sourceforge.net/htmldoc/scroll.html
и
http://rsusu1.rnd.runnet.ru/unix/ucomm/vi.html

It is good day to die ...
MS Windows 10
Заметки о главном...

13 (13.01.2011 09:50:49 отредактировано BreatheInTheVoid)

Нет, про это я знаю)) Нужна прокрутка окна на одну строку. Но спасибо за доки, с ними я придумал как легко написать плагин))

*edited

Даже плагин никакой не нужен, справился хоткеями. Для меня полезное дополнение к листаниям на экран и пол-экрана))
Может кому пригодится

" Single string scrolling
" Ctrl + j(Ctrl + Down) - One string down
" Ctrl + k(Ctrl + Up) - One string up
  nmap <C-J> Lj
  nmap <C-K> Hk
  nmap <C-Down> Lj
  nmap <C-Up> Hk


Попутный вопрос: Как кто справляется с копи\пастом в глобальный клипборд? Например чтобы выделил в визуальном режиме текст
и смог вставить в gedit например.

14

BreatheInTheVoid пишет:

От непривычки нужна одна маленькая функция и я ее ни как не могу найти. Нужно прокручивать построчно текст ( как в шеле CTRL+SHIFT+UP(DOWN) ).

Ctrl + e
Ctrl + y

Это, нет?

15

BreatheInTheVoid пишет:

Попутный вопрос: Как кто справляется с копи\пастом в глобальный клипборд? Например чтобы выделил в визуальном режиме текст
и смог вставить в gedit например.

как известно, в vim'е есть куча буферов обмена, a,b,c,d,e... Глобальный тоже есть, * (звёздочка). Вот только работает он далеко не всегда, зависит от того, с какими опциями собран VIM. Попробуйте. Если (как это часто бывает), звёздочка не работает, используйте файлы для обмена с другими редакторами.

Например mcedit умеет сохранять блок в файл ~/.mc/cedit/cooledit.clip командой C-Ins.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

16

Самые лучшие , из известных мне, vim ссылки на русском языке.
http://welinux.ru/post/4428/
http://jenyay.net/Programming/Tools

Purple haze all in my brain
Lately things don't seem the same
Actin' funny, but I don't know why
'Scuse me while I kiss the sky

17

Еще несколько ссылок
Окна и буферы: http://habrahabr.ru/blogs/vim/28572/
Настройки:
для PHP: http://allaboutvim.blogspot.com/2007/07 … e-php.html
для Python-а: http://allaboutvim.blogspot.com/2007/12/vim-python.html и http://habrahabr.ru/blogs/python/74128/

Debian

18 (12.04.2011 09:21:41 отредактировано drBatty)

вот текстовые файлы http://drbatty.ru/files/vim.rux/
надо скачать и читать в vim'е. Это русский перевод help'а.

PS: кодировка KOI8-R
++enc=koi8-r
ЕМНИП

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

19 (10.01.2014 14:40:43 отредактировано moshell)

не могу(не знаю как называется) найти в vim'е опцию
когда жмакаешь {
то автоматом через строчку появляется }
а посередине вставляется #code

то есть нажал {

и получается что то вроде

operator {
   #code
}

адд
inoremap {      {}<Left>
inoremap {<CR>  {<CR>}<Esc>O
inoremap {{     {
inoremap {}     {}

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

20

возник вопрос.

как заставить vim применять подсветку синтаксиса сразу же после нажатия :w  ?
ибо приходится делать выход и вход, напрягает.

в nano к примеру после нажатий Ctrl+o сразу разукрашивает

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

21

доброй ночи уважаемые.
тема скатывается и видимо умирает.
но вопрос про подсветку все еще открыт

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

22

moshell, здравствуйте.

По первому вашему вопросу. Для этих целей лучше использовать сниппеты. Работу со сниппетами обеспечивает плагин SnipMate. Установить его можно как вручную, так и с помощью менеджера плагинов для Vim. Последний вариант наиболее предпочтителен. Я настоятельно рекомендую использовать менеджер Vundle.

Вот два видеоролика об этих плагинах:

Vim Plugins: Vundle Package Management System

Vim Essential Plugin: SnipMate

Вот также пару статей о них:

Vundle. Менеджер плагинов для Vim

Продуктивная работа в vim с использованием snipMate

Второй ваш вопрос не совсем понятен. Подсветка синтаксиса включается следующей директивой:

 Консоль:

syntax on

После включения подсветки имеется возможность использования разных цветовых схем. Цветовая схема задается следующей командой `colorscheme {name}`*. Например:

 Консоль:

colorscheme desert

Для того, чтобы эти директивы работали при каждом запуске редактора необходимо включить их в файл `~/.vimrc`.
________
* Если хотите просмотреть все доступные цветовые схемы наберите в командной строке Vim'а `colorscheme ` (с пробелом в конце) и далее нажимайте клавишу Tab.

23 (12.01.2014 10:56:56 отредактировано moshell)

SamuelLinux, я благодарю Вас за столь развернутый ответ.
спасибо.

на первый свой вопрос я ответил еще в сообщении самого вопроса.

на данный момент меня интересует моментальная, молниеносная, реактивная (как еще бы написать?) подсветка синтаксиса.
syntax on
включен.
колор схема perl выбирается автоматом.
подсветка у меня работает.
но! не сразу.

если открывать старые скрипты (уже сохраненные), то подсветка есть.
если создавать новый скрипт, то чтобы появилась подсветка нужно выйти из vim и обратно зайти.
даже если сделать (сохранить)
:w
все равно не загорается, нужен выход-вход.


к примеру в редакторе nano создавая новый скрипт подсветка включается сразу после сохранения
Ctrl+o


вот я и не пойму. это нормальное поведение vim или это только у меня такая беда?

syntax on
" F11 - включить-выключить нумерацию строк
imap <F11> <Esc>:set<Space>nu!<CR>a
nmap <F11> :set<Space>nu!<CR>

"set autoindent " ai - включить автоотступы (копируется отступ предыдущей строки)
"set tabstop=4 " ширина табуляции
"set expandtab " преобразовать табуляцию в пробелы
"set smartindent " Умные отступы (например, автоотступ после {)

"НАСТРОЙКИ ОТСТУПА
set shiftwidth=4 " размер отступов (нажатие на << или >>)
set tabstop=4 " ширина табуляции
set softtabstop=4 " ширина 'мягкого' таба
set autoindent " ai - включить автоотступы (копируется отступ предыдущей строки)
set cindent " ci - отступы в стиле С
set expandtab " преобразовать табуляцию в пробелы
set smartindent " Умные отступы (например, автоотступ после {)
" Для указанных типов файлов отключает замену табов пробелами и меняет ширину отступа
au FileType crontab,fstab,make set noexpandtab tabstop=8 shiftwidth=8
set laststatus=2
"автозакрытие скобок
inoremap {      {}<Left>
inoremap {<CR>  {<CR>}<Esc>O
inoremap {{     {
inoremap {}     {}
"автодополение Ctrl+p
set completeopt=menuone,menu,longest,preview

//add
в vimrc у меня принудительно не выставлена colorscheme
она подтягивается автоматом, видимо на основе шабанг.
но почему после сохранения :w она не врубается?

//add принудительно дописал в vimrc цветовую схему. ничо не поменялос. опять нужен выход-вход

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

24

moshell, а вручную если включить?

Откройте Vim. Набросайте пару строк на Перле. В командной строке редактора введите:

 Консоль:

:set filetype=perl

25 (12.01.2014 11:35:14 отредактировано SamuelLinux)

Если сработает. В `~/.vimrc` добавьте:

 Консоль:

" подсвечивать синтакс
  syntax on

" использовать цветовую схему desert (одна из стандартных схем)
  colorscheme desert

" после сохранения файлов с расширением *.pl автоматически применять подсветку для языка Perl
  autocmd BufWrite *.pl set filetype=perl

26 (12.01.2014 12:00:11 отредактировано moshell)

SamuelLinux пишет:

moshell, а вручную если включить?

Откройте Vim. Набросайте пару строк на Перле. В командной строке редактора введите:

 Консоль:

:set filetype=perl

ааа волшебник. лови плюс! спасибо

SamuelLinux пишет:

Если сработает. В `~/.vimrc` добавьте:

 Консоль:

" подсвечивать синтакс
  syntax on

" использовать цветовую схему desert (одна из стандартных схем)
  colorscheme desert

" после сохранения файлов с расширением *.pl автоматически применять подсветку для языка Perl
  autocmd BufWrite *.pl set filetype=perl

енто не нужно. и так все ок)

http://s019.radikal.ru/i625/1401/4c/3b323ee4425d.jpg

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

27 (12.01.2014 12:46:40 отредактировано moshell)

SamuelLinux, нашел вот чего, может и вам пригодится.
функция сама определяет тип файла. по истечение ввода 20 символов.
то есть пишешь все одним цветом, когда вводишь 21й символ, сама разукрашивает

autocmd CursorMovedI * call CheckFileType()
function CheckFileType()
if exists("b:countCheck") == 0
let b:countCheck = 0
endif
let b:countCheck += 1
" Don't start detecting until approx. 20 chars.
if &filetype == "" && b:countCheck > 20
filetype detect
endif
endfunction

и уже на основе сиго раскрашивает как надо

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

28

moshell, спасибо.

Можно так ещё:

 Консоль:

" ~/.vimrc

" определять тип файла при бездействии в режиме редактирования (по умолчанию 4000 мс)
" (см. :help CursorHoldI)
  autocmd CursorHoldI * filetype detect

Замечу, что и ваш сценарий, и моё решение будет работать в том случае, если в начале файла присутствует либо „хэшбэнг“:

 Консоль:

#! /usr/bin/perl

или даже

#! /usr/bin/env perl

либо modeline (см. :help modeline):

 Консоль:

# в любом месте файла, обычно в начале или в конце
# vim: set filetype=perl:

Ещё замечу, что в теле функции, в вашем сценарии есть следующее условие:

 Консоль:

if &filetype == "" && b:countCheck > 20

То есть, если в `~/.vimrc` присутствует директива `filetype on`, сценарий, к сожалению, не сработает. У вас этой директивы там судя по всему нет и может быть поэтому у вас не включается подсветка синтаксиса при сохранении нового файла. Соответственно, чтобы всё работало, сценарий можно изменить так:

 Консоль:

- if &filetype == "" && b:countCheck > 20
+ if b:countCheck > 20

И последнее, как я уже сказал выше, один из вариантов срабатывания сценария — это использование modline в файле с исходным кодом. Так вот, если вы попытаетесь добавить modline после того, как наберёте > 20 символов (в конец файла, например), то при вводе директивы для Vim'а, редактор будет выдавать ошибки до тех пор, пока инструкция не будет дописана. То есть:

https://dl.dropboxusercontent.com/u/20481401/linuxforum/modeline_result.png

Таким образом, событие `CursorMovedI` — не самое подходящее в этом случае.

29

угу. только у меня после ввода 21го символа окраска сама происходит и без сохранения.
причем пробовал начинать писать bash и perl
разные окраски происходят.

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

30

кто знает как называется сиё удобство?

при открытии файла чтобы vim кидал меня в то место, где я работал до выхода из редактора.
чтоб не искать.

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс