VIM

  • Перемещение
  • Маркеры
  • Удаление
  • Разные команды
  • Поиск
  • Регистры
  • Вкладки
  • Привязки
  • .vimrc
  • Ссылки
hjkl – перемещение ← ↓ ↑ →
w – переместиться вперед на первую букву слова.
e – переместиться вперед на последнюю букву слова.
b – переместиться назад на первую букву слова.
ge – переместиться назад на последнюю букву слова.

gE, B, W и E – тоже самое, что и ge, b, w, и e, но только в этом случае словом будет считаться любая последовательность букв, разделенных пробельными символами.

( – На одно предложение назад (до точки)
) – На одно предложение вперед (до точки).
{ – На абзац назад (до пустой строки).
} – На абзац вперед (до пустой строки).
]] – То же для секции/функции вперед
[[ – То же для секции/функции назад
$ – перемещает курсор в конец строки (эквивалентно end).
^ – перемещает курсор на первый непробельный символ в строке.
0 – перемещает курсор на первый символ строки (в начало строки, эквивалентно home).
g{j, k} – перемещает курсор на одну экранную строку {вниз, вверх}. Когда длинная строка
не умещается в одной экранной строке, она разбивается на несколько экранных строк.
j и k перемещают по реальным строкам, а gj (или g↓) и gk (или g↑) – по экранным.
  
fn – перемещает курсор вперед на символ n в текущей строке (символ понимается буквально, это не номер!).
Fn – перемещает курсор назад на символ n в текущей строке.

Интересное следствие: если курсор на последнем символе слова, то f<space> переместит его на последний символ следующего слова (v f<space> выделит следующее слово с предшествующим пробелом)

t, T – аналогичны f и F, но перемещают курсор не на сам символ, а на символ, находящийся перед ним.
; – повторяет поиск, производимый последней командой f, F, t или T.
, – повторяет поиск, производимый последней командой f, F, t или T, но в обратном порядке.
% – перемещает курсор на парную круглую, фигурную или квадратную скобку.
Пары можно задать командой :set matchpairs.
:5 или 5G – перемещает курсор на 5 строку.
gg – перемещает курсор на первую строку.
G – перемещает курсор на последнюю строку.
50% – перемещает курсор в середину текста.
H, M, L – перемещают курсор в начало, середину и конец видимой части текста.
  
{<C-U>, <C-D>} – прокручивает текст на половину высоты окна {вниз, вверх}.
  
{<C-Y>, <C-E>} – прокручивает текст на одну строку {вниз, вверх}, но при этом не перемещает курсор.
  
{<C-F>, <C-B>} – прокручивает текст {вниз, вверх} на количество строк, равное высоте окна минус 2 строки.
  
{zs, ze, zt, zz, zb} – прокручивает текст так, чтобы курсор оказался {на левом крае, на правом крае, вверху, в центре, внизу} экрана. Работают только если не включен перенос строк (wrap).

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

void foo(int val_1, int val_2);

то поставив курсор за первую круглую скобку и нажав dt), вы очистите все содержимое внутри скобок, т. е. получите строку

void foo();

Перемещения (прыжки) с помощью меток (маркеров) и списка прыжков

'' или `` – возврат к предыдущей позиции перед последним прыжком по буферу
'. – возврат к позиции, где было сделано последнее изменение
'^ – возврат к позиции, в которой был совершен последний выход из режима вставки
[N]Ctrl-O – переход к прежней позиции в списке прыжков (без N) или к позиции N.
<Tab> или Ctrl-I – переход к более новой позиции в списке прыжков.
:ju – показать список прыжков.

Для быстрого перехода в разные места документа или между документами, можно выставлять метки.
Некоторые метки Vim ставит автоматически:

{0-9} – 10 последних позиций в закрытых файлах (0 последний файл, 1 предпоследний и т.д.)
< и > – левая и правая позиции помеченного текста.
( и ) – начало и конец текущего предложения
{ и } – начало и конец текущего параграфа
[ и ] – первый и последний символы скопированного или изменённого текста
. – позиция последней замены
' или ` – позиция перед последним переходом
" – позиция перед последним выходом из файла
^ – позиция последней стоп-вставки
'' или `` – переход к позиции перед последним прыжком по буферу или позиции, где применялись команды m' или m`
'. – возврат к позиции, где было сделано последнее изменение
'^ – возврат к позиции, в которой был совершен последний выход из режима вставки

Для установки ручной метки использовать m{a-zA-Z} (после m следует либо a,b..z либо A, B..Z).
Для перехода между метками используются '{метка} и `{метка}.
Для удаления от текущей строки до метки {метка} использ. команда d'{метка}

' – устанавливает курсор на первый не пробельный символ в отмеченной строке
` – устанавливает курсор на место где была установлена метка
C-O C-I – перемещение к ранее посещенным меткам (назад и вперед)

Существует различие между строчными и заглавными символами меток:

{a - z} – локальный файл
{A - Z} – сохраняется и доступно между сессиями (ассоциированы с файлами)

Можно использовать метку L для ведения рабочего журнала и T для своего расписания и быстро обновлять информацию в них.
Например, можно легко перейти к позиции курсора перед закрытием файла, набрав `" (в настройках Vim легко сделать, что бы при открытии файла курсор автоматически перемещался в эту позицию)

Для получения списка всех меток можно набрать команду :marks. Для удаления меток используется :delmarks. :delmarks a b c удалит метки a, b и c, для удаления всех меток используйте :delmarks!

Для справки набрать :h mark

dw, daw – удаление слова с пробелом;
diw, de – то же без пробела;
dis – удалить фразу (предложение) без обрамления;
das – то же с обрамлением;
dib – удалить внутренний блок ()
dab – то же с обрамлением;
dip – удалить параграф (блок текста, ограниченный пустыми строками; последние не удаляются)
dap – то же с обрамлением;
diB – удалить внутренний блок {}
daB – то же с обрамлением;
d$ – удаление от курсора до конца строки;
d^ – от курсора до начала строки;
dd – удаление строки, где бы в ней не находился курсор;
x, dl – удаление знака под курсором;
c – полностью аналогична d, но после своего выполнения переводит редактор в режим вставки;
cc – полностью аналогична dd, но после своего выполнения переводит редактор в режим вставки;
  
X – аналогична x, но "стирает текст влево, а не вправо". Если проводить аналогии, то x – это клавиша Del, а X – клавиша Backspace;
  
D – аналогична d$;
C – аналогична c$;
s – аналогична xi;
S – аналогична cc.

Применимы конструкции с числом: напр., 2de приведет к удалению двух слов без пробела за последним.

ПРИМЕЧАНИЕ: всё, удаленное этими командами, помещается во внутренний буфер vim'а, и может быть немедленно вставлено в позиции курсора нажатием p.

Удаление в командном режиме

:n,md – простецкое удаление диапазона строк от n до m (бывает удобнее и проще других способов);
:g/^$/d – удалить все пустые строки (или соответствие другому регекспу);
:v/string/d – удалить все строки, не содержащие string;

В режиме вставки:

<C-W> – удаляет слово перед курсором;
<C-U> – удаляет все символы от начала строки до курсора;

С использованием меток (маркеров):

d'a – удалить текст от текущей строки включительно до строки с меткой 'a' включительно
d`a – удалить текст от курсора до позиции метки 'a'

Отмена изменений, возврат

u – отменить последнее действие.
Nu – отменить N последних действий
U – отменить все последние изменения текущей строки
C-r или :red[o] – вернуть отмененное
NC-r – вернуть N отмененных действий

Изменение регистра символов

~ – изменить регистр символа под курсором
N~ – изменить регистр N символов, начиная от курсора
{Выделенное}~ – изменить регистр выделенного
{Выделенное}U – выделенное в верхний регистр
{Выделенное}u – выделенное в нижний регистр
NvEU – слово (или N слов) под курсором в верхний регистр
vE~ – инвертировать регистр слова
VU – текущая строка в верхний регистр
Vu – текущая строка в нижний регистр
Ng~~ – инвертировать регистр текущей строки (или N строк, начиная с текущей)
(N)gUU – текущую строку (или N строк, начиная с текущей) в верхний регистр
Nguu – текущую строку (или N строк, начиная с текущей) в нижний регистр

Несколько полезных команд:

:%s/\<./\u&/g – Первая буква каждого слова в верхний регистр
:%s/\<./\l&/g – Первая буква каждого слова в нижний регистр
:%s/^\<./\u&/g | %s/[.?!] ./\U&/g – Первая буква каждого предложения каждого абзаца в верхний регистр

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

Склеивание

NJ – соединяет N строк (без N текущую и следующую), удаляя отступы и вставляя до 2-х пробелов
NgJ – то же, но не изменяя отступы и пробелы
:[N,M]j[!] – (в командном режиме) склеивает строки от N до M. Если введен !, пробелы и отступы не меняются.
/<regexp> – "Обычный" поиск, ищем то, что записано после /;
n N – поиск следующего совпадения (вперед назад);
* # – Искать слово под курсором (вперед назад);
  
g*, g# – тоже самое, что * и #, но со следующей разницей: при поиске 'the' команда * найдет в тексте только слово the, тогда как g* найдет the, there и т. п.
  
/foo\|bar – искать строку либо с foo, либо с bar (обратить внимание: '|' экранируется)
[I – открыть "окно поиска" (быстрый просмотр всех строк со словом, находящимся под курсором);
]I – то же, но начиная с текущей строки;
q/ q? – открыть "окно истории поиска" (разновидность командного окна) (закрывается как обычное окно, напр., :q)

Вставка содержимого регистра в строку поиска

Чтобы вставить содержимое регистра в строку поиска, выполняем /Ctrl-R (появляется "), затем имя-регистра.

Смещения

(См. :h 27.3)

По умолчанию, команда поиска перемещает курсор в начало соответствия шаблону.
При помощи смещения можно указать Vim переместить курсор в какое-либо другое место.
Для команды поиска вперёд ("/"), смещение указывается при помощи второго слэша и величины смещения:

/default/2 – ищет default и перемещает курсор в начало второй строки после найденного default
Смещение /e – смещение от конца соответствия
/default/e – курсор переместится на t
/default/e+1 – курсор переместится на один символ вправо от t
/default/e-1 – курсор переместится на один символ влево от t, т.е. на l

Если смещение начинается с /b, то курсор переместится в начало совпадения. Далее можно также смещать его (+n/-n)
Смещение можно задавать и при повторном поиске, а также отменять его -- см. usr_27.ru в Russian Vim

Поиск файлов

(См. usr_22.ru в Russian Vim)

gf – открывает файл, имя которого под курсором, если файл находится в текущем каталоге. Чтобы открыть файл в новом окне, надо Ctrl-W f вместо gf, см. также переопределение в "Привязках" для открытия в новом табе.
  
:find file – ищет файл file (в текущем каталоге).
:reg – просмотреть все регистры;
:dis – то же;
:reg [name1][name2][...] – просмотреть конкретные регистры;
"ayy – скопировать текущую строку в регистр a;
"add – вырезать текущую строку в регистр a;
"A2d – вырезать текущую + 2 строки и дописать их в конец регистра A;
:let @{reg-name} = {expr} – записать результат регекспа в регистр {reg–name}. См. :h let
:let @a = "" – очистить регистр a (записать в него пустую строку);

В режиме выделения

"ay – копировать выделенное в регистр а;
"ap – вставить содержимое регистра a.

Вставка содержимого регистра в командную строку/строку поиска:

Чтобы вставить содержимое регистра в комстроку или строку поиска, выполняем:
: (или /), затем Ctrl-R (появляется "), затем имя-регистра.

:tabe[dit] [file] – создает новую вкладку и открывает в ней file (или каталог);
:tabnew [file] – то же

Например, удобно открывать во вкладке файлы из текущей директории командой :tabe . (обратите внимания на точку).

Чтобы не было мучительно больно каждый раз вспоминать и забивать эти команды, можно воспользоваться такой привязкой в .vimrc:

nnoremap <leader>t :tabnew .

Теперь комбинацией клавиш \ (или другой leader, если вы его переназначили) и t в комстроку вводится команда :tabnew .

gt – переключаемся между вкладками;
Ngt – переключаемся на вкладку с номером N;

Менее удобны команды для тех же целей:

:tabn[ext][N] – перейти на вкладку N (без N – на следующую)
:tabm[ove][N] – перемещает текущую вкладку так, чтобы она стояла после вкладки N;
:tabc[lose] [N]– закрывает вкладку N (если на закрытие vim повешен кейбинд, то текущую вкладку закрывать удобнее им);
Привязка — клавиша (или комбинация клавиш), назначенная для выполнения команды (или последовательности команд).

>
Привязка Запись в .vimrc
F2 – быстрое сохранение nmap <F2> :w<CR>
vmap <F2> <Esc>:w<CR>i
imap <F2> <Esc>:w<CR>i
F3 – скрыть результаты поиска nnoremap <F3> :nohlsearch<CR>:echo "nohlsearch"<CR>
inoremap <F3> <C-O>:nohlsearch<CR><C-O>:echo "nohlsearch"<CR>
vnoremap <F3> <Esc>:nohlsearch<CR>:echo "nohlsearch"<CR>
F5 – закрыть vim nmap <F5> :q<CR>
imap <F5> <Esc>:q<CR>
vmap <F5> <Esc>:q<CR>
F8 – выбор кодировки чтения файла
(если vim сам не разобрался)
(См. подробнее)
set wildmenu
set wcm=<Tab>
menu Encoding.koi8-r :e ++enc=koi8-r ++ff=unix<CR>
menu Encoding.windows-1251 :e ++enc=cp1251 ++ff=dos<CR>
menu Encoding.cp866 :e ++enc=cp866 ++ff=dos<CR>
menu Encoding.utf-8 :e ++enc=utf8 <CR>
menu Encoding.koi8-u :e ++enc=koi8-u ++ff=unix<CR>
map <F8> :emenu Encoding.<TAB>
F7 – выбор кодировки сохранения файла
(См. у Дм. Конищева)
set wildmenu set wcm=<Tab>
menu Encoding.Write.utf-8<Tab><S-F7> :set fenc=utf8 <CR>
menu Encoding.Write.windows-1251<Tab><S-F7> :set fenc=cp1251<CR>
menu Encoding.Write.koi8-r<Tab><S-F7> :set fenc=koi8-r<CR>
menu Encoding.Write.cp866<Tab><S-F7> :set fenc=cp866<CR>
map <F7> :emenu Encoding.Write.<TAB>
F6 – перевод слова под курсором
Требуется установка sdcv (консольный stardict) и словарей
(См. у Макса Антонова)
map <F6> :call TRANSLATE()<cr>
    function TRANSLATE()
        let a=getline('.')
        let co=col('.')-1
        let starts=strridx(a," ",co)
        let ends = stridx(a," ",co)
        if ends==-1
            let ends=strlen(a)
        endif
        let res = strpart(a,starts+1,ends-starts)
         let cmds = "sdcv -n " . res
        let out = system(cmds)
        echo out
     endfunction
\Home – быстрое открытие в соседнем вертикальном окне ~/.vimrc
nnoremap <leader><Home> <C-w><C-v><C-l>:e $MYVIMRC<cr>
gf – Открываем файл под курсором в новой вкладке map gf :tabe <cfile><CR>
; – Поиск и замена слова под курсором
(Переопределяет команду повторного поиска,
см. "Перемещение")
nmap ; :%s/\<C-R>=expand("<cword>")<CR>\>/
\[ – обрезать все лишние пробелы в текущем файле
(См. здесь)
nnoremap <leader>[ :%s/\s\+$//<cr>:let @/=''<CR>

Это мой рабочий .vimrc, только слегка почищенный от следов всяких новаций и экспериментов, накопившихся за годы. Непосредственно с этой страницы он может не корректно копироваться, так что если нужно его скопировать "как есть", следует сделать это отсюда.

  1 " Последняя правка -- январь 2015
  2 "===============
  3 " не совместимо с vi
  4 set nocompatible
  5 " ---------------------------
  6 syntax on
  7 
  8 " автоматически менять каталог на текущий
  9 set autochdir
 10 
 11 " ==================================
 12 " Настройки табуляции
 13 set tabstop=4
 14 set shiftwidth=4
 15 set softtabstop=4                                                                                        
 16 set expandtab
 17 "  ================================
 18 " хранить swap в отдельном каталоге
 19 set directory=~/.vim/swap/
 20 
 21 set noswapfile      " не использовать своп-файл
 22 
 23 " упорядочиваем отображение длинных строк
 24 set showbreak=\ \ \ \
 25 
 26 " =================== Синтаксис, плагины etc ==========
 27 " Включаем определение типа файла и плагинов по типу
 28 filetype on
 29 filetype plugin on
 30 filetype plugin indent on
 31 " -----------
 32 "  Улучшщаем цвета для темного бэкграунда
 33 set bg=dark
 34 
 35 " Упорядочиваем установки history и undo
 36 if version >= 700
 37     set history=99
 38     set undolevels=128
 39     set undodir=/home/brego/.vim/undo/
 40     set undofile
 41     set undolevels=1000
 42     set undoreload=10000
 43 endif
 44 " =====================================================
 45 " Работа с вставкой и отступами (опция 'paste')
 46 set pastetoggle=<F10>
 47 " =====================================================
 48 " не ждать завершения escape-последовательностей
 49 set ttimeoutlen=100
 50   
 51 " читать параметры конфигурации из modeline открытого файла
 52 set modeline
 53   
 54 " не выгружать скрытые буферы
 55 set hidden
 56   
 57 " перечитывать изменённые файлы автоматически
 58 set autoread
 59   
 60 " настроить Vim так, чтобы при открытии файла он каждый раз восстанавливал
 61 " позицию курсора, с которой файл был закрыт в прошлый раз
 62 "   --------------------------------------------------------
 63 if has("autocmd")
 64   au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
 65 endif
 66 "-------Или видами:-----------
 67 "if has("autocmd")
 68 "    set viewoptions=cursor,folds
 69 "    au BufWinLeave * mkview
 70 "    au BufWinEnter * silent loadview
 71 "endif
 72 " --------------------------------
 73 
 74 " использовать больше цветов в терминале
 75 set t_Co=256
 76 
 77 " разрешить backspace в режиме вставки
 78 set backspace=2
 79 
 80 " Подсвечивать текущую строку
 81 set cursorline
 82 
 83 " Показывать положение курсора всё время.
 84 set ruler
 85 
 86 " показывать номера строк ...
 87 set number
 88 
 89 " показывать первую парную скобку после ввода второй ...
 90 set showmatch
 91 
 92 " ... чуть меньше времени
 93 set matchtime=1
 94 
 95 " показывать совпадающие скобки для HTML-тегов
 96 set matchpairs+=<:>
 97 
 98 " Включаем перенос строк
 99 set wrap
100 " Перенос строк по словам, а не по буквам
101 set linebreak
102 set wrapmargin=2  " отступ от правой границы окна, где надо начинать перенос.
103 
104 " Включаем отображение выполняемой в данный момент команды в правом нижнем углу экрана.
105 " К примеру, если наберем 2d, то в правом нижнем углу экрана Vim отобразит строку 2d.
106 set showcmd
107 
108 " сделать строку команд больше
109 set cmdheight=2
110 
111 " использовать wildmenu ...
112 set wildmenu
113 " ... с авто-дополнением
114 set wildcharm=<TAB>
115 " Порог уведомлений
116 set report=0
117 " максимальное число вкладок
118 set tabpagemax=10
119 " Взято http://jack.kiev.ua/docs/slackbook/book.html
120 if has("mouse")
121     " разрешить визуальное выделение мышью
122     set mouse=nvir
123 endif
124 
125 " ============ НАСТРОЙКИ СВОРАЧИВАНИЯ БЛОКОВ КОДА (фолдинг) =================
126 "Вставлено 05_11_2010 отсюда: http://www.dimio.org/fajl-nastrojki-vim-vimrc-dlya-linux-i-windows.html
127 set foldenable " включить фолдинг
128 set foldmethod=manual " определять блоки вручную
129 set virtualedit=block  " Совет В.Попова (http://rus-linux.net/MyLDP/consol/Vim-Popov.html)
130 
131 " ---------------- Создание складок -------
132 " В ком.режиме-- :[n,m]fo
133 " В режиме выделения -- выделяем и zf
134 " ----------------
135 
136 " Переключение фолдов по Space создание фолда в визуальном режиме
137 nnoremap <silent> <Space> @=(foldlevel('.')?'za':'l')<CR>
138 vnoremap <Space> zf
139 " заставить vim окрывать файлы со свернутыми вручную фолдами:
140 au BufReadPost * silent loadview
141 " заставить vim автоматически сохранять созданные вручную фолды:
142 au BufWritePost * mkview
143 
144 " ========= Leader ==========
145 " По умолчанию, клавиша-лидер \
146 "
147 " Позволяет удерживая клавишу \ и нажав Home, быстро открыть в соседнем вертикальном окне ~/.vimrc
148 nnoremap <leader><Home> <C-w><C-v><C-l>:e $MYVIMRC<cr>
149 " Открывает .vimrc в новой вкладке комбинацией \End
150 nnoremap <leader><End> :tabe $MYVIMRC<cr>
151 " Загоняем :tabnew/:tabedit в комстроку
152 nnoremap <leader>t :tabnew .
153 " Открываем .bashrc в новой вкладке
154 nnoremap <leader>b :tabnew ~/.bashrc<cr>
155   
156 " Открывает вертикальное окно и передает ему фокус
157 nnoremap <leader>w <C-w>v<C-w>l
158   
159 " показывать строку статуса всегда
160 set laststatus=2
161 " Подсветки в строке статуса см. ../Ubuntu_база_знаний/vim/Разные_настройки/
162 set statusline=%t\ %y%1*%m%*%r[%{&fileencoding}]%<[%{strftime(\"%d.%m.%y\",getftime(expand(\"%:p\")))}]%k%=%-14.(%l,%c%V%)\ %P
163  " показывать имя буфера в заголовке терминала
164 set title
165 " формат заголовка
166 set titlestring=%t%(\ %m%)%(\ %r%)%(\ %h%)%(\ %w%)%(\ (%{expand(\"%:p:~:h\")})%)\ -\ VIM
167 "----------------------------------------
168 " использовать инкрементальный поиск
169 set incsearch
170                                                                                                          
171 " использовать подсветку поиска
172 set hlsearch
173 
174 " игнорировать регистр при поиске ...
175 set ignorecase
176 
177 " ... если поисковый запрос в нижнем регистре
178 set smartcase
179 
180 " Поиск и замена слова под курсором клавишей ';'
181 nmap ; :%s/\<<C-R>=expand("<cword>")<CR>\>/
182 
183 " предлагать авто-дополнение на основе уже введённого регистра
184 set infercase
185 
186 " не менять позицию курсора при прыжках по буферу
187 set nostartofline
188 
189 " ================
190 if has("unix")
191     " фикс для русских клавиш
192 
193 set langmap=йq,цw,уe,кr,еt,нy,гu,шi,щo,зp,х[,ъ],фa,ыs,вd,аf,пg,рh,оj,лk,дl,ж\\;,э',яz,чx,сc,мv,иb,тn,ьm,б\\,,ю.,ё`,ЙQ,ЦW,УE,КR,ЕT,НY,ГU,ШI,ЩO,ЗP,Х{,Ъ},ФA,ЫS,ВD,АF,ПG,РH,ОJ,ЛK,ДL,Ж:,Э\\",ЯZ,ЧX,СC,МV,ИB,ТN,ЬM,Б<,Ю>,Ё~
194 endif
195 " ================
196 " Делаем скрипты исполняемыми при сохранении
197 au BufWritePost * if getline(1) =~ "^#!.*/bin/"|silent !chmod a+x %|endif
198 
199 " Функционал для редактирования html
200 "======================================
201 " Обертки-html выделенного - оставляют редактор в командном режиме, кроме sa
202     " s1 - оборачиваем в h1
203 vnoremap s1 "zdi<h1><C-R>z</h1><ESC>                                                                     
204     " s2 - в h2, s3 - в h3
205 vnoremap s2 "zdi<h2><C-R>z</h2><ESC>
206 vnoremap s3 "zdi<h3><C-R>z</h3><ESC>
207     " sq - оборачиваем в кавычки
208 vnoremap sq "zdi&laquo;<C-R>z&raquo;<ESC>
209     " sp - оборачиваем в параграф
210 vnoremap sp 1"zdi<p><C-R>z</p><ESC>
211         " sg - оборачиваем в span
212 vnoremap sg 1"zdi<span class="cif"><C-R>z</span><ESC>
213     " sd - в div
214 vnoremap sd 1"zdi<div><C-R>z</div><ESC>
215     " sa - вводит <a href="" и оставляет vim в режиме ввода
216 vnoremap sa "zdi<a href="<esc>maa"><C-R>z</a><ESC>`aa
217     " sc - оборачиваем в css-коментирование (мое творчество:)
218 vnoremap sc "zdi/*<C-R>z*/<ESC>
219         " sz - оборачиваем в html-коммент
220 vnoremap sz "zdi<!-- <C-R>z --><ESC>
221     " so - оборачиваем в italic
222 vnoremap so 1"zdi<i><C-R>z</i><ESC>
223 " -------------------------------------------------------------------
224 "  Работа с энтитями. См http://vim.wikia.com/wiki/HTML_entities
225 " Escape/unescape & < > HTML entities in range (default current line).
226 function! HtmlEntities(line1, line2, action)
227   let search = @/
228   let range = 'silent ' . a:line1 . ',' . a:line2
229   if a:action == 0  " must convert & last
230     execute range . 'sno/</</eg'
231     execute range . 'sno/>/>/eg'
232     execute range . 'sno/&/&/eg'
233   else              " must convert & first
234     execute range . 'sno/&/&/eg'
235     execute range . 'sno/</</eg'
236     execute range . 'sno/>/>/eg'
237   endif
238   nohl                                                                                                   
239   let @/ = search
240 endfunction
241 command! -range -nargs=1 Entities call HtmlEntities(<line1>, <line2>, <args>)
242 noremap <silent> \h :Entities 1<CR>
243 noremap <silent> \H :Entities 0<CR>
244 " Значения 1 и 0 в последних 2-х строках я поменял, т.к. \h набирать гораздо легче.
245
246 "-----------------------------------------------------------------
247 " отключить автоматический перенос строк
248 set formatoptions=qrn1
249 
250 " отключить автоматическое открытие новой строки комментария
251  set formatoptions-=0
252  
253 " ========== Кодировки ===========
254 " Свое меню с выбором кодировки по F8
255 " использ. коммент stasikos отсюда http://habrahabr.ru/blogs/vim/28181/
256 set wildmenu
257 set wcm=<Tab>
258 menu Encoding.koi8-r :e ++enc=koi8-r ++ff=unix<CR>
259 menu Encoding.windows-1251 :e ++enc=cp1251 ++ff=dos<CR>
260 menu Encoding.cp866 :e ++enc=cp866 ++ff=dos<CR>
261 menu Encoding.utf-8 :e ++enc=utf8 <CR>
262 menu Encoding.koi8-u :e ++enc=koi8-u ++ff=unix<CR>
263 map <F8> :emenu Encoding.<TAB>
264 " Выбор кодировки, в которой сохранять файл -- см. http://konishchevdmitry.blogspot.com/2008/07/howto-vim.html
265 set wildmenu
266 set wcm=<Tab>
267 menu Encoding.Write.utf-8<Tab><S-F7> :set fenc=utf8 <CR>
268 menu Encoding.Write.windows-1251<Tab><S-F7> :set fenc=cp1251<CR>
269 menu Encoding.Write.koi8-r<Tab><S-F7> :set fenc=koi8-r<CR>
270 menu Encoding.Write.cp866<Tab><S-F7> :set fenc=cp866<CR>
271 map <F7> :emenu Encoding.Write.<TAB>
272 " Параметры работы с кодировками см. http://habrahabr.ru/blogs/vim/53435/
273 " Кодировка терминала, должна совпадать с той, которая используется для вывода в терминал
274 set termencoding=utf-8
275 " возможные кодировки файлов и последовательность определения.
276 set fileencodings=utf8,cp1251,koi8-r,cp866,koi8-u
277 " Нижеследующее рекомендуется многими
278 set encoding=utf8
279 " При прокрутке оставлять шесть экранных строк под и над курсором
280 set so=5
281 
282 " скрыть результаты поиска
283 nnoremap <F3> :nohlsearch<CR>:echo "nohlsearch"<CR>
284 inoremap <F3> <C-O>:nohlsearch<CR><C-O>:echo "nohlsearch"<CR>
285 vnoremap <F3> <Esc>:nohlsearch<CR>:echo "nohlsearch";<CR>
286 
287 " F2 - быстрое сохранение
288 nmap <F2> :w<CR>
289 vmap <F2> <Esc>:w<CR>i
290 imap <F2> <Esc>:w<CR>i
291 
292 " Закрыть VIM
293 nmap <F5> :q<CR>
294 imap <F5> <Esc>:q<CR>
295 vmap <F5> <Esc>:q<CR>
296 
297 "   > Настройки файлов {{{
298 "===========================================================================
299 " .doc файлы. Необходима утилита antiword
300 au BufReadPre *.doc set ro
301 au BufReadPre *.doc set hlsearch!
302 au BufReadPost *.doc %!antiword "%"
303 
304 " .odt и подобные xml-файлы - всего лишь zip (см. тут:
305 " http://s.arboreus.com/2008/06/antiodt-openoffice.html)
306 " .odt файлы. Необходим скрипт antiodt (см. http://sovety.blogspot.com/2008/06/antiodt-openoffice.htm)
307 " Требуется также xmlstarlet
308 au BufReadPre *.odt set ro
309 au BufReadPre *.odt set hlsearch!
310 au BufReadPost *.odt %!antiodt "%"
311 
312 "   .pdf файлы. Необходим пакет poppler-utils
313 au BufReadPost *.pdf silent %!pdftotext -nopgbrk "%" - |fmt -csw78
314 
315 " ====== Перевод в VIM по F6. Взято http://www.instanceof.ru/linux/vim/translate
316 " Необходимо установить консольную версию Stardict -- sdcv
317 map <F6>  :call TRANSLATE()<cr>
318 function TRANSLATE()
319    let  a=getline('.')
320    let co=col('.')-1
321    let starts=strridx(a," ",co)
322    let ends = stridx(a," ",co)
323    if ends==-1
324        let ends=strlen(a)
325    endif
326    let res = strpart(a,starts+1,ends-starts)
327    let cmds = "sdcv -n " . res
328    let out = system(cmds)
329    echo out
330 endfunction
331 " ==========
332 " paranoid mode
333 " Перенесено в конец согласно рекомендации options.txt
334 set secure
	
      http://www.vim.org/
      
         Ссылка на загрузку ruvim-0.5-utf8.zip: 
      http://sourceforge.net/projects/ruvim/files/ruvim-doc-beta/ruvim-0.5/ruvim-0.5-utf8.zip/download
      
         "Vim: Небольшой справочник":
      http://dev-mark.blogspot.ru/2010/12/vim_23.html
      
      http://www.allaboutvim.ru/
      http://www.allaboutvim.ru/2012/01/statusline.html
      
        HowTo Конищева:
      http://konishchevdmitry.blogspot.ru/2008/07/howto-vim.html
      
      http://stevelosh.com/blog/2010/09/coming-home-to-vim/
      
      http://ru.wikibooks.org/wiki/Vim
    

Emmet

  • Синтаксис
  • DOCTYPE
  • html -1
  • html -2
  • html -3
  • CSS -1
  • CSS -2
  • Ссылки
Управляющий символ Пример записи Результат
Дочерние (Child): > nav>ul>li <nav> <ul> <li></li> </ul> </nav>
Соседние (Sibling): + div+p+bq <div></div> <p></p> <blockquote></blockquote>
Climb-up: ^ div+div>p>span+em^bq <div></div> <div> <p><span></span><em></em></p> <blockquote></blockquote> </div>
Climb-up: ^^ div+div>p>span+em^^bq <div></div> <div> <p><span></span><em></em></p> </div> <blockquote></blockquote>
Multiplication: * ul>li*5 <ul> <li></li> <li></li> <li></li> <li></li> <li></li> </ul>
Grouping: ()
(1-й пример группировки)
div>(header>ul>li*2>a)+footer>p <div> <header> <ul> <li><a href=""></a></li> <li><a href=""></a></li> </ul> </header> <footer> <p></p> </footer> </div>
Grouping: ()
(2-й пример группировки)
(div>dl>(dt+dd)*3)+footer>p <div> <dl> <dt></dt> <dd></dd> <dt></dt> <dd></dd> <dt></dt> <dd></dd> </dl> </div> <footer> <p></p> </footer>
Item numbering: $
(1-й пример нумерации атрибутов)
ul>li.item$*5 <ul> <li class="item1"></li> <li class="item2"></li> <li class="item3"></li> <li class="item4"></li> <li class="item5"></li> </ul>
Item numbering: $
(2-й пример нумерации атрибутов)
h$[title=item$]{Header $}*3 <h1 title="item1">Header 1</h1> <h2 title="item2">Header 2</h2> <h3 title="item3">Header 3</h3>
Item numbering: $
(3-й пример нумерации атрибутов)
ul>li.item$$$*5 <ul> <li class="item001"></li> <li class="item002"></li> <li class="item003"></li> <li class="item004"></li> <li class="item005"></li> </ul>
Item numbering: $
(4-й пример нумерации атрибутов)
ul>li.item$@-*5 <ul> <li class="item5"></li> <li class="item4"></li> <li class="item3"></li> <li class="item2"></li> <li class="item1"></li> </ul>
Item numbering: $
(5-й пример нумерации атрибутов)
ul>li.item$@3*5 <ul> <li class="item3"></li> <li class="item4"></li> <li class="item5"></li> <li class="item6"></li> <li class="item7"></li> </ul>
ID and CLASS attributes
(4 примера)
#header
.title
form#search.wide
p.class1.class2.class3
<div id="header"></div>
<div class="title"></div>
<form id="search" class="wide"></form>
<p class="class1 class2 class3"></p>
Custom attributes
(3 примера)
p[title="Hello world"]

td[rowspan=2 colspan=3 title]

[a='value1' b="value2"]
<p title="Hello world"></p>

<td rowspan="2" colspan="3" title=""></td>

<div a="value1" b="value2"></div>
Text: {} a{Click me}
p>{Click }+a{here}+{ to continue}
<a href="">Click me</a>
<p>Click <a href="">here</a> to continue</p>
Implicit tag names
(2 прим.)
.class
em>.class
<div class="class"></div>
<em><span class="class"></span></em>
Implicit tag names
(еще 2 прим.)
ul>.class



table>.row>.col
<ul> <li class="class"></li> </ul>

<table> <tr class="row"> <td class="col"></td> </tr> </table>
Сниппет Развернуто
!
или
html:5
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> </body> </html>
!!! <!doctype html>
doc <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> </body> </html>
doc4 <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Document</title> </head> </html>
html:4t <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Document</title> </head> </html>
html:4s <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Document</title> </head> </html>
html:xt <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Document</title> </head> </html>
html:xs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Document</title> </head> </html>
html:xxs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Document</title> </head> </html>
!!!4t <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
!!!4s <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
!!!xt <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
!!!xs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
!!!xxs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Сниппет Результат
link <link rel="stylesheet" href="" />
link:css <link rel="stylesheet" href="style.css" />
link:print <link rel="stylesheet" href="print.css" media="print" />
link:favicon <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
link:touch <link rel="apple-touch-icon" href="favicon.png" />
link:rss <link rel="alternate" type="application/rss+xml" title="RSS" href="rss.xml" />
link:atom <link rel="alternate" type="application/atom+xml" title="Atom" href="atom.xml" />
meta:utf <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
meta:win <meta http-equiv="Content-Type" content="text/html;charset=windows-1251" />
meta:vp <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
meta:compat <meta http-equiv="X-UA-Compatible" content="IE=7" />
script <script></script>
script:src <script src=""></script>
Сниппет Результат
input <input type="text" />
inp <input type="text" name="" id="" />
input:hidden, input:h <input type="hidden" name="" />
input:text, input:t <input type="text" name="" id="" />
input:search <input type="search" name="" id="" />
input:email <input type="email" name="" id="" />
input:url <input type="url" name="" id="" />
input:password, input:p <input type="password" name="" id="" />
input:datetime <input type="datetime" name="" id="" />
input:date <input type="date" name="" id="" />
input:datetime-local <input type="datetime-local" name="" id="" />
input:month <input type="month" name="" id="" />
input:week <input type="week" name="" id="" />
input:time <input type="time" name="" id="" />
input:number <input type="number" name="" id="" />
input:color <input type="color" name="" id="" />
input:checkbox, input:c <input type="checkbox" name="" id="" />
input:radio, input:r <input type="radio" name="" id="" />
input:range <input type="range" name="" id="" />
input:file, input:f <input type="file" name="" id="" />
input:submit, input:s <input type="submit" value="" />
input:image, input:i <input type="image" src="" alt="" />
input:button, input:b <input type="button" value="" />
input:reset <input type="reset" value="" />
select <select name="" id=""></select>
option <option value=""></option>
textarea <textarea name="" id="" cols="30" rows="10"></textarea>
Сниппет Результат
table+ <table> <tr> <td></td> </tr> </table>
tr+ <tr> <td></td> </tr>
Закрыть