Vim: скринкасты

Тут буду подкладывать ссылок на кладбища скринкастов по виму
  1. Vim Tutorial Videos - для начинающих, от базовых до очень интересных вещей, веселый автор
  2. Vimcasts.org - широко известный ресурс, просто тонны всяких vim-вкусняшек, обязательно к посещению
  3. Destroy All Software - ворованный каталог из 80 скринкастов одного очень толкового дядьки. Кроме вима также рассматриваются git, TDD, *nix и т.д. Каталог можно глянуть вот тут.
  4. udioica.blogspot.ru - это не совсем скринкасты, а анимированные gif-ки с решениями задач с vimgolf.com. Вообще-то я не уверен что это человек. Больше похоже на vim-терминатора. Я не представляю как это все можно запомнить.

Vim: перезагрузка ~/.vimrc налету

Очень неудобно бывает после правки .vimrc закрывать сессию полностью чтобы применить внесенные изменения. Можно этого избежать довольно легко:
# выполните в редакторе :echo $MYVIMRC чтобы понять что это за переменная
source $MYVIMRC
Чтобы было удобнее жить можно добавить пару команд покороче, например так:
" edit ~/.vimrc file
command! RcEdit e $MYVIMRC
" reload ~/.vimrc config
command! RcReload source $MYVIMRC

task1: начало #1

Дело было вечером делать было нечего. Решил затеять "проект" с целью осилить то, что так долго не могу собраться. Проект будет публичный, но на какую-либо популярность я не расчитываю, довести до финала планирую ради спортивного интереса, для себя.
Суть банальна и проста: от начала до конца реализовать некий законченный продукт на незнакомых технологиях. Сам продукт будет представлять собой 100500 по счету в мире веб тайм-трекер с блекджеком и гетерами. У меня есть несколько специфичных "идей по дизайну", но мелкие детали на этом этапе не так уж важны, здесь только крупными мазками что будет:
  1. Авторизация через социалки
  2. Проекты как очереди собственных тасков
  3. Создание тудушек ака тасков для себя в выбранной очереди (к таскам можно лепить файлы)
  4. Статусы решен / не решен только пока
  5. Тайм трекинг по таскам автоматический или ручной, надо подумать как именно трекать
  6. Возможность создать текстовый отчет за день или за какой-то период в днях (на что и сколько потрачено с тоталами)
На чем должно быть сделано:
  1. Python, Flask, SQLALchemy
  2. PostgreSQL
  3. Интерфейс одностраничный собранный на BACKBONE.JS
  4. Видимо jQuery и Bootstrap, правда я с ними знаком, но верстаю я коряво, а без jQuery не представляю как обеспечить кроссбраузерность, клиентсайдом я все же слаб. Иконки возьму тоже знакомые Font Awesome
Итого должен освоить python с плюшками плюс backbone.js. Не головокружительный опыт конечно, но как я себе представляю - придется потрогать все (или почти все) стандартные серверные вещи и создать какое-то вменяемое приложение на клиенте.
Про сервер наверное nginx с чем-то типа fcgi я пока не в курсе как эта сторона на питоне устроена вообще.
Писать буду по мере сил под этот тег. Репа будет на гитхабе, все как у нормальных людей.

Vim: поиск и замена строк в файле

Я пользуюсь этим в виме не часто пока и постоянно забываю как там танцуется эта замена, самый простенький вариант примерно такой: имеем файл пример с таким содержимым:
./folder1/folder2/file1.txt
./folder1/folder2/file2.txt
./folder1/folder2/file3.txt
./folder1/folder2/file4.txt
./folder3/folder5/file5.txt
./folder3/folder5/file6.txt
./folder3/folder5/file7.txt
./folder4/folder6/file8.txt
./folder4/folder6/file9.txt
./folder4/folder6/file10.txt
Допустим нужно отрезать из каждой строки все что касается пути, то есть чтобы остались только имена файлов. Переходим в командный режим и выполняем
:%s/\.\/.*\///gc
Выглядит довольно похабно, но в общем-то главное знать что искать. Синтаксис замены вообще примерно такой
:%s/serach-str/replace-str/g
search-str - то что ищем, replace-str - то на что заменяем, просто в примере выше использовано регулярное выражение и слешей много из-за обычного скрина точки и слешей. Модификатор c в примере означает что каждое найденное совпадение и соответственно его замену нам надо будет подтвердить, иначе все найденное в файле будет молча заменено.

Интересный нюанс: чтобы заменить что-то с переводом строки \n придется использовать \r то есть примерно вот так
:%s/\n/ -- \r/gc
Либо как вариант, тоже самое
# чтобы ввести ^M жмем (прямо в строке набора команды) Ctrl+v - Enter
:%s/\n/ -- ^M/gc

Vim: как отформатировать xml

Для этого понадобится установить xmllint
# для ubuntu
sudo apt-get install libxml2-utils

В .vimrc это будет выглядеть примерно так
command FormatXml execute "%!xmllint --format --recover - "
После этого вызов в редакторе чтобы отформатировать текущий файл будет таким:
:FormatXml
Другие бинды на ваше усмотрение конечно.