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: ,

Monday, August 01, 2011

Сущности в xslt-шаблонах

Так как пользуюсь редко, все время забываю :( Поэтому вот узелок на память:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp "&#160;">
<!ENTITY middot "&#183;">
<!ENTITY raquo "&#187;">
<!ENTITY laquo "&#171;">
]>



Правильнее, конечно, выносить в отдельный файл, пусть это будет entities.dtd:

<!ENTITY nbsp "&#160;">
<!ENTITY ololo "Пепяка">


А потом подключать:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE xsl:stylesheet SYSTEM "entities.dtd">

Labels: ,

Tuesday, June 21, 2011

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

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

Labels:

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

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

Labels:

JS: вызывать проверку с таймаутом, пока деревянная лошадка не пукнет.

И не срем в глобальную область видимости:
  1. (function (i, start, iterations) {
  2.     (function () {
  3.         if (i < iterations) {
  4.             i++;
  5.             setTimeout.call(this, arguments.callee, 1);
  6.         } else {
  7.             alert(i + ' iterations took ' + ((+new Date()) - start) + 'ms');
  8.         }
  9.     })();
  10. })(0, +new Date(), 500);
* This source code was highlighted with Source Code Highlighter.

Labels: ,

Monday, April 18, 2011

Backspace в Firefox, Ubuntu

Многих, как и меня, мучает странное (не для всех, но для тех, кого мучает) поведение кнопки backspace в Firefox под Ubuntu - она не заставляет браузер покорно переходить на предыдущую страницу.  Тогда самое время вводить aboout:config в адресной строке, искать свойство browser.backspace_action и выставлять его в 0.
Пояснения с kb.mozillazine.org:
0 - Нажатие Backspace заставляет браузер совершить переход на страницу назад,  Shift+Backspace - вперед (поведение по умолчанию в Windows)
1 - Backspace проматывает текущий документ вверх, Shift+Backspace - вниз (Поведение наблюдается в Linux дистрибутивах до 2006-12-07).
[edit]
(др.) - Любое другое целое число просто отключает Backspace. В Linux после 2006-12-07 значение по умолчанию - 2.

Labels: ,

Wednesday, March 23, 2011

Изменение символической ссылки

Однажды столкнувшись с необходимостью быстро переключать символическую ссылку на различые директории, я долго не мог понять как это сделать одной командой. Сначала я никак не мог пересоздать симлинку поверх существующей, потом возникла проблема с тем, что симлинка ссылается на директорию и новая линка создавалась в директори...
Однако все оказалось проще пареной репы:
ln -nfs dir_name link_name перевесит ссылку link_name на папку dir_name.
-s - тут все понятно, указываем, что хотим симлинку
-f - опция разрешает переписывать существующую симлинку
-n - тут весь смак: опция говорит не обращать внимания на то, является ли объект файлом или директорией

PS. Необходимость возникла при работе с двумя ветками проекта, расположенных в разных папках, скажем, project_trunk и project_branch, в то время как сервер смотрел на симлинку project.

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: ,