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, February 09, 2011

Florence + the Machine

Florence and the Machine - ненапряжный инди/соул с отличным вокалом для рабочего фона.
Есть на Я.Музыке.


Labels:

Tuesday, February 01, 2011

lighttpd: url.redirect и url.rewrite-once

Сначала Rewrite, потом Redirect!

Не знаю почему, но я все время путаю, в каком порядке работают эти директивы, результаты работы какой из них пользователю видны, а какой нет... Итак:
url.rewrite-once обрабатывает урлы в пределах веб-сервера (более того, в пределах хоста, так как переписывается относительный путь).
Затем url.redirect делает редирект, а то вдруг редирект внешний.


$HTTP["host"] =~ "^www\.example\.com$" {
    url.redirect = (
        "^/(.*)" => "http://example.com/$1"
    )
}

$HTTP["host"] =~ "^example\.com$" {
    url.rewrite-once = (
        "^/action/(\w+)$" => "/foo.php?action=$1",
        "^/foo/(\w+)$" => "/poo.php"
    )

    url.redirect = (
        "^/poo\.php(.*)" => "http://poo.example.com/"
    )

}

Запросы на www.example.com будут редиректиться на example.com, но эта не та часть, которая нас интересует. Далее запросы будут преобразовываться внутри хоста example.com (прозрачно для пользователя, текст в адресной строке останется неизменным): запрос /action/pee будет преобразован в foo.php?action=pee и на этом все остановится, а /foo/kungfoo - в /poo.php.
И только после этого для /foo/kungfoo, преобразованного в /poo.php, будет сделан редирект на http://poo.example.com/. И именно http://poo.example.com/ пользователь увидит в адресной строке.

Labels: