Saturday, December 10, 2011

vim, пересохранение файла с другим форматом перевода строки

:w ++ff=unix
:w ++ff=dos
:w ++ff=mac
Эти несложные заклинания помогают сохранить файл используя разделитель строк, принятый во вражеской ОС, либо же вернуть родной, получив файл, отредактированный кем-то. И, да, это та самая магия, которая позволяет удалить эти мерзкие ^ или ^M в конце строки.
Windows: 0x0D 0x0A (CR LF)
*nix: 0A (LF)
Mac: 0A 0D (LF CR)

Labels: ,

Tuesday, June 21, 2011

Выделение блоков в vim

Нашел пару удобных команд для выделения блоков в визуальном режиме:
ab - выделяет блок между (), вместе со скобками
aB - выделяет блок между {}, вместе со скобками
ib - выделяет блок между (), без скобок
iB - выделяет блок между {}, без скобок

Labels:

Показывать текущий режим в Vim

В Vi из коробки показ текущего режима (Insert, Replace, Visual) в нижней строке выключен, включить можно командой  
:set showmode
В Vim наоборот, по умолчанию эта опция включена. Выключить можно командой
:set noshowmode
 

Labels:

Thursday, March 03, 2011

Vim: табуляции и пробелы

Периодически у меня возникали различные проблемы с пробелами и табуляциями. Вот несколько полезных настроек, которые помогли мне с ними разобраться:
:set expandtab - заменяет табуляции при вставке на пробелы
:set tabstop=4 - устанавливает количество пробелов, на которые нужно заменять табуляции
Стоит отметить, что после использования expandtab только новые табуляции будут заменяться на пробелы. Чтобы привести все табуляции к текщей политике, можно использовать команду :retab
Для изменения количества пробелов, которые используются для выравнивания строк, используется переменная shiftwidth, например:
:set shiftwidth=4
Для того, чтобы увидеть табуляции и прочие спецсимволы, можно воспользоваться командой:set list
Команда
:set nolist скроет спецсимволы обратно.
NB: табуляции показываются как ^I, поэтому их можно искать (вне зависимости от того, показываются они или нет) используя команду /C-VC-I (/ control-V control-I), и если включена подсветка, то первая найденная табуляция будет подсвечена.

Labels:

Vim: переменные

Для работы с переменными помимо известной большинству команды :set foo=bar (которая установит значение переменной foo в bar) есть еще ряд иногда полезных команд:
:set - просмотреть все переменные, значение которых отличается от предустановленных
:set all - просмотреть все переменные
:set foo? - просмотреть текущее значение переменной bar
:set foo+=bar - изменить переменную foo, добавив в список значений bar 
:set foo-=bar - изменить переменную foo, убрав в список значений bar 
:setlocal foo - применить только для текущего буфера

Labels:

Tuesday, February 15, 2011

Диапазоны в vim

Диапазоны позволяют применять команду к группе строк в текущем буфере. Для большинства команд диапазоном по умолчанию является текущая строка, например:
:s/old/new/g   заменяет все old на new в текущей строке

Диапазоны могут быть указаны с использованием номеров строк или спецсимволов,как это показано в примерах далее:
ДиапазонОписаниеПример
21 line 21 :21s/old/new/g
1 первая строка:1s/old/new/g
$ последняя строка:$s/old/new/g
. текущая строка:.w single.txt
% все строки (аналог 1,$) :%s/old/new/g
21,25 строки с 21 по 25 включительно:21,25s/old/new/g
21,$ строки с 21 до последней:21,$s/old/new/g
.,$ строки от текущей до последней:.,$s/old/new/g
.+1,$ строки от следующей за текущей до последней :.+1,$s/old/new/g
.,.+5 шесть строк (текущая + последующие 5) :.,.+5s/old/new/g
.,.5 то же, что и предыдущее (.5 интерпретируется как .+5) :.,.5s/old/new/g

Стоит обратить внимание на четвертый пример: в нем будет создан новый файл single.txt, содержащий только текущую строку. 

Если возникла задача произвести замену в 6 строках, начиная с текущей, то можно воспользоваться одним из методов, приведенных в примерах выше. Однако есть более простой способ: напечатать 6, а затем команду замещения без диапазона (напр. :s/old/new/g). Так как сначала было введено число, vim отобразит команду :.,.+5s/old/new/g. Чего и хотелось.
Для большинства команд диапазоном по умолчанию является ., однако для команд :g// и :w диапазоном по умолчанию является %.

Вольный перевод части этого.

Labels: ,

Wednesday, January 26, 2011

Работа с буферами и вкладками в Vim

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

Итак, основные команды для работы с буферами:
:ls или  :buffers - просмотр открытых буферов
:e[dit] file- открыть файл file в новом буфере
:bn[ext] - переход в следующий буфер
:bp[revious] - переход в предыдущий буфер
:b# - переход в буфер #, где # - номер из списка буферов
:bd - удалить текущий буфер (если буфер единственный, то vim закроется)
:bmod - переход к следующему несохраненному буферу

какое-то время удобным вариантом для меня было забиндить показ списка буферов и переключение между соседними на функциональные клавиши, например:
nmap <F5> :ls<CR>
nmap <F7> :bn<CR>
nmap <F8> :bp<CR>

Аналогичный список команд для работы с вкладками у меня такой:
:tabs - список открытых вкладок
:tabnew [filename] - открыть новую вкладку
:gt или :tabn[ext] - перейти в следующую вкладку
::gT или tabp[revious] - перейти в предыдущую вкладку
:tabfir[st] - перейти в первую вкладку
:tablast - перейти в последнюю вкладку
:tabdo command - выполнить команду command для всех вкладок
:tabm[ove] # - переместить вкладку на позицию # (отсчет - от нуля)

P.S.:
vim -p file1.txt foo.py - откроет vim с двумя вкладками

Labels: