Доброго всем времени суток
стараясь сдержать свое обещанию, хочу опубликовать след. статью об редакторе vim
В статье подразумеваться что читатель уже знаком с азами работы в vim'e, она будет посвящая более эффективному использованию накопленных знаний.
tips 1:
tips 2:
tips 3:
пример:
имеет строку:
$i->love()->mylove()->because->sheis->VerySuccessfully();
нужно напечатать
$i->love()->mylove()->because->sheis->VerySexy();
все что выделено черным напечатано при помощи CTRL-Y,
те реально печатали только VerySexy();
пример:
имеет строку:
$i->love()->mylove()->because->sheis->VerySilly();
хотим ее тутже посторить:
СRTL-A (и все, не нужно переходить в другой режим копировать ее и тп)
$i->love()->mylove()->because->sheis->VerySilly();
пряность 3, зачем считать, зачем страдать, когда есть CTRL-R=
стараясь сдержать свое обещанию, хочу опубликовать след. статью об редакторе vim
В статье подразумеваться что читатель уже знаком с азами работы в vim'e, она будет посвящая более эффективному использованию накопленных знаний.
tips 1:
Я забыл какой именно файл я редактирую…
просмотреть имя файла — CTRL-G
«php.ini» 1255 lines --1%--
детальную информацию — gCTRL-G
Col 1 of 71; Line 18 of 1255; Word 79 of 6980; Byte 563 of 44684
tips 2:
Ты не используешь gi ?????????
gi — очень полезна
вы пишите в 143й строке файла php.ini, выходите из режима вставки, смотрите другой файл\буффер, нажимаете gi и продолжаете редактировать 143ю строку php.ini.
tips 3:
Девушка, нам повторить!
пряность 1, единичный повтор
CTRL-E, СTRL-Y в режиме команд сдвиг экрана на 1-ну строчку ниже\выше
в режиме вставки вставляет символы из нижней\высшей строки
пример:
имеет строку:
$i->love()->mylove()->because->sheis->VerySuccessfully();
нужно напечатать
$i->love()->mylove()->because->sheis->VerySexy();
все что выделено черным напечатано при помощи CTRL-Y,
те реально печатали только VerySexy();
пряность 2, повторить последний ввод
СRTL-A — вставляет последние введенное предложение (в режиме вставки!)
пример:
имеет строку:
$i->love()->mylove()->because->sheis->VerySilly();
хотим ее тутже посторить:
СRTL-A (и все, не нужно переходить в другой режим копировать ее и тп)
$i->love()->mylove()->because->sheis->VerySilly();
пряность 3, зачем считать, зачем страдать, когда есть CTRL-R=
режим вставки:
CRTL+R=5*5+25 — вставит 50;
пряность 4
:read !date — вставит текущею дату
:read !cat file — вставит содержимое файла file
:grep -iR «TODO» * + copen — пожет все TODO в проекте
:read !cat /dev/random — выдаст пароль администатора\текущего пользователя (ТОЛЬКО ДЛЯ true unix users!?) главное не забываем CTRL+C нажать
пряность 5, абзацы
CRTL-T, CRTL-D вставка абзацев в режиме редактирования
Поиск — это естественно
*/# — поиск следующей/предыдущей позиции слова
[I, ]I — показывает все линии в которых содержаться слово под курсором
хм…
для более удобного использования давайте сделаем:
:nmap [I:let nr = input(«Which one: „) exe “ normal ». nr ."[\t"
итак, мой рот уже закрылся, а вера в реальность вроде вернулась, хотя духовные ценности и вера в другие редакторы уже похоже не возобновиться…
я продолжу…
Поиск в vim — это естественно
повторение — мать учения
/ — ищет след вхождение ? — ищет пред вхождение n — повторить последний поиск
N — повторить последний поиск в противоположном направлении
итак:
хотелось бы затронуть тему регулярных выражений ( бл*, пи****=)
к сожелению язык регулярных это тема для целой книги.
тут я хочу показать примеры, которые использую чаще других:
d/^# — удалить все от текущей строки до первого комметария
10d/^# — соотвественно до 10-го
y/^class/;function выделит все от текущей позиции до первного вхождения function в классе класс.
:%s/foo/bar — заменяет foo на bar во всем файле (эквивалентно :1,$s/foo/bar/ )
:.,/<\/body>/s,
, < br/ > ,gc — правит тег
от текущей строки до тега
, cпрашивая о потверждении без пробелов, это хаброэффект
(c — «cautios», предостерегать)
аффтар был настолько пьян… что оставил возможность читателю прокоментировать след. выражение:
:-23,'ts/wow/WOW/
?
& — повторить последнию замену в текущей строке
:&& — повторить последнию замену в текущей строке c темиже флагами
g& — повторить замену для всего файла
shift+влево влево влево двигаются руки notepad'овца
aw,iw,as,ap,a{ — поет душа vim'овца
идем в вируальный режим:
iw, iW — выделить слово
aw, aW — выделить слово, пробельные символы не учитываться
as, is — выделить последовательность слов (as, is — разница есть, см — iw, aw)
ap, ip — выделить параграф
a{, i{ — выделить весь блок {..} или текст внутри него
a(, i( — выделить весь блок (..) или текст внутри него
a<, i< — выделить весь блок (..) или текст внутри него
a', i' — выделить одноковычную стоку или текст внутри нее
a", i" — выделить двухковычнкую сточку или текст внутри нее
(vim знает что \" учитывать не нужно )
at, it — выделить весь тег или текст внутри него (привет XML & HTML)
примеры:
das — удалить последовательность, включая пробельные символы после нее.
ci( — заменить текст внутри (...)
yat — скопировать весь тег внутри которого находиться курсор
gU' — sql запросы пишем в вверхнем регистре! (меняет регистр в одноковычной строке на верхний)
vip — выделит весь параграф без пробельных символов
умная вставка
:set autoindent — Отформатирует абзац при вставке новой строки.
]p, ]P — вставить до\после и отформатирует отступы
не всегда удобно (
:nnoremap P P'[v']=
:nnoremap P P'[v']=
до ] — не дотягиваюсь, поэтому использую
работа с регистрами
частично была описано в пред — habrahabr.ru/blog/vim/45414.html
хотелось бы добавить:
«0 — последний скопированый текст, который не был занесен в регистр
»1 — последний удаленный текст, который не был занесен в регистер
(" — и был длинее одной строки)
…
«2 — »9 удаленный текст для 2,9й команды
". — последний вставленный текст
"% — название текущего файла
"_ — регистер черный ящик (его использование ни как не влияет на другие регистры)
:reg — выводит значение всех текущий регистров
запись макросов
q начала записи макроса, последовательное q останавливает запись
@ выполняет макрос
@@ выполняет последний исполненый макрос
думаю тут можно привести небольшой пример
раньше в коде писал
global $db;
теперь стиль немного поменялся и я стал писать
$db = Database::get();
такого кода довольно много, хотя он и совсем небольшой
какие мне нужный действия для замены?
1.найти global $db;
2.заменить global $db;
3.на $db = Database::get();
теперь через vim;
1й пункт — :grep -iR «global $db;» *
2,3-й постораюсь сделать ввиде макроса:
итак, после 1-го пункта, режим команд, жмем qa, d2W, i
вводим $db = Database::get();
q.
записали макрос
:copen
ищем след вхождение global $db;
теперь просто жмем @a
идем к след вхождению
ps прощу заметить, что это что-то вроде hello world для макросов, те совсем простейший пример.
Thourht time in the past
наверное еще одна из возможностей vim'a которая меня поражает =)
g-/g+ — скользим между более старым/новым текстом
:earler Ns,m,h — вернуть содержание файла, которое было s,m,h «time» спустя
:later — соотвественно наоборот, вернуть содержание файла, которое было s,m,h «time» после
:ealer 60m — блин, ну и вино мне продали сегодня =)
всем спасибо за внимание…
ps есть вопросы? пишите, коллективный разум поможет вам!
:read !cat file — вставит содержимое файла file
:grep -iR «TODO» * + copen — пожет все TODO в проекте
:read !cat /dev/random — выдаст пароль администатора\текущего пользователя (ТОЛЬКО ДЛЯ true unix users!?) главное не забываем CTRL+C нажать
итак, мой рот уже закрылся, а вера в реальность вроде вернулась, хотя духовные ценности и вера в другие редакторы уже похоже не возобновиться…
я продолжу…
Поиск в vim — это естественно
повторение — мать учения
/ — ищет след вхождение ? — ищет пред вхождение n — повторить последний поиск
N — повторить последний поиск в противоположном направлении
итак:
хотелось бы затронуть тему регулярных выражений ( бл*, пи****=)
к сожелению язык регулярных это тема для целой книги.
тут я хочу показать примеры, которые использую чаще других:
d/^# — удалить все от текущей строки до первого комметария, cпрашивая о потверждении
10d/^# — соотвественно до 10-го
y/^class/;function выделит все от текущей позиции до первного вхождения function в классе класс.
:%s/foo/bar — заменяет foo на bar во всем файле (эквивалентно :1,$s/foo/bar/ )
:.,/<\/body>/s,
, < br/ > ,gc — правит тег
от текущей строки до тегабез пробелов, это хаброэффект
(c — «cautios», предостерегать)
аффтар был настолько пьян… что оставил возможность читателю прокоментировать след. выражение:
:-23,'ts/wow/WOW/
?
& — повторить последнию замену в текущей строке
:&& — повторить последнию замену в текущей строке c темиже флагами
g& — повторить замену для всего файла
shift+влево влево влево двигаются руки notepad'овца
aw,iw,as,ap,a{ — поет душа vim'овца
идем в вируальный режим:
iw, iW — выделить слово
aw, aW — выделить слово, пробельные символы не учитываться
as, is — выделить последовательность слов (as, is — разница есть, см — iw, aw)
ap, ip — выделить параграф
a{, i{ — выделить весь блок {..} или текст внутри него
a(, i( — выделить весь блок (..) или текст внутри него
a<, i< — выделить весь блок (..) или текст внутри него
a', i' — выделить одноковычную стоку или текст внутри нее
a", i" — выделить двухковычнкую сточку или текст внутри нее
(vim знает что \" учитывать не нужно )
at, it — выделить весь тег или текст внутри него (привет XML & HTML)
примеры:
das — удалить последовательность, включая пробельные символы после нее.
ci( — заменить текст внутри (...)
yat — скопировать весь тег внутри которого находиться курсор
gU' — sql запросы пишем в вверхнем регистре! (меняет регистр в одноковычной строке на верхний)
vip — выделит весь параграф без пробельных символов
умная вставка
:set autoindent — Отформатирует абзац при вставке новой строки.
]p, ]P — вставить до\после и отформатирует отступы
не всегда удобно (
:nnoremap P P'[v']=
:nnoremap P P'[v']=
до ] — не дотягиваюсь, поэтому использую
работа с регистрами
частично была описано в пред — habrahabr.ru/blog/vim/45414.html
хотелось бы добавить:
«0 — последний скопированый текст, который не был занесен в регистр
»1 — последний удаленный текст, который не был занесен в регистер
(" — и был длинее одной строки)
…
«2 — »9 удаленный текст для 2,9й команды
". — последний вставленный текст
"% — название текущего файла
"_ — регистер черный ящик (его использование ни как не влияет на другие регистры)
:reg — выводит значение всех текущий регистров
запись макросов
q начала записи макроса, последовательное q останавливает запись
@ выполняет макрос
@@ выполняет последний исполненый макрос
думаю тут можно привести небольшой пример
раньше в коде писал
global $db;
теперь стиль немного поменялся и я стал писать
$db = Database::get();
такого кода довольно много, хотя он и совсем небольшой
какие мне нужный действия для замены?
1.найти global $db;
2.заменить global $db;
3.на $db = Database::get();
теперь через vim;
1й пункт — :grep -iR «global $db;» *
2,3-й постораюсь сделать ввиде макроса:
итак, после 1-го пункта, режим команд, жмем qa, d2W, i
вводим $db = Database::get();
q.
записали макрос
:copen
ищем след вхождение global $db;
теперь просто жмем @a
идем к след вхождению
ps прощу заметить, что это что-то вроде hello world для макросов, те совсем простейший пример.
Thourht time in the past
наверное еще одна из возможностей vim'a которая меня поражает =)
g-/g+ — скользим между более старым/новым текстом
:earler Ns,m,h — вернуть содержание файла, которое было s,m,h «time» спустя
:later — соотвественно наоборот, вернуть содержание файла, которое было s,m,h «time» после
:ealer 60m — блин, ну и вино мне продали сегодня =)
всем спасибо за внимание…
ps есть вопросы? пишите, коллективный разум поможет вам!