вівторок, 24 лютого 2015 р.

Небольшой трюк при работе с git. Часть 2

В статье Небольшой трюк при работе с git я описал функцию g, которая немного упрощает работу с командой git. Однако, для этой функции не работает стандартное zsh-автодополнение. Помочь может команда compdef, которая позволяет связать существующие правила автодополнения с новой командой. После добавления в .zshrc строк:
# Actually set the compdef to git
compdef g=git
наша жизнь снова станет прекрасной и удивительной.

понеділок, 16 лютого 2015 р.

Небольшой трюк при работе с git

Добавив следующий фрагмент в .zshrc (или .bashrc):
function g {
  if [[ $# > 0 ]]; then
    git $@
  else
    git status
  fi
}
получим очень удобную функцию g: при вызове без параметров она вызывает git status, с параметрами - соответствующую команду git’а. Пример:

пʼятниця, 6 лютого 2015 р.

Сортировка import’ов в XCode

Озаботился сегодня красивым оформлением import’ов в программах на ObjC. XCode, конечно не Vim, но с помощью Automator’а можно создавать скрипты и для этой IDE. Например, в статье предлагается для сортировки import’ов использовать скрипт вида:
sort | uniq

Но я предпочитаю разбивать import’ы на группы:
  1. Стандартные
  2. Дополнительные библиотеки
  3. Локальные
Например:
@import AVFoundation;
@import GLKit;

#import <AssetsLibrary/AssetsLibrary.h>
#import <iCarousel.h>

#import "PreviewView.h"
#import "ViewController.h"
Поэтому сделал такой скрипт для сортировки:
#! /bin/sh
tempfoo=`basename $0`
ORIG_FN=`mktemp ${TMPDIR:-'/tmp/'}${tempfoo}.XXXXXX`

cat /dev/stdin > $ORIG_FN

grep '@import' $ORIG_FN | sort | uniq
echo
grep '#import *<' $ORIG_FN | sort | uniq
echo
grep '#import *"' $ORIG_FN | sort | uniq

rm $ORIG_FN
Единственный момент, на который следует обратить внимание: в Automator’е следует указать полный путь к этому скрипту.
Сам скрипт можно взять на GitHub’е.

пʼятниця, 30 січня 2015 р.

Использование меню в Vim для запоминания команд

Как известно, наши недостатки - это продолжение наших достоинств. Широкие возможности, гибкость, масса плагинов Vim‘а приводят к тому, что для его эффективного использования необходимо помнить множество команд и клавиатурных сокращений. Чтобы упростить себе процесс запоминания, я создал меню из часто используемых команд и указал соответствующие команды/сокращения. Например, фрагмент .gvimrc:
" Common commands
"
" Plugin 'fisadev/FixedTaskList.vim'
amenu User.TaskList\ (F2)    <F2>
" Plugin 'vim-scripts/YankRing.vim'
amenu User.YRShow\ (F3)     <F3>
" Vim common
amenu User.Clear\ search\ selection\ (<Leader>c)      <Leader>c

" Pad menu: Plugin 'fmoralesc/vim-pad'
amenu User.Pad.Pad\ list\ (:Pad\ ls)  <ESC>:Pad ls<CR>
amenu User.Pad.Pad\ new\ unnamed\ (:Pad\ new) <ESC>:Pad new<CR>

" vim:noexpandtab


В меню User я перечислил наиболее общие команды. Для файлов отдельных типов меню создаю в соответствующих файлах, например для blog, ~/.vim/bundle/vim-xblogger/ftplugin/blog.vim:
amenu Blog.Insert\ code\ (:Rc\ file_name) :Rc
amenu Blog.Post\ (<Leader>post)  <Leader>post
amenu Blog.TOC\ (<Leader>t)  <Leader>t
amenu Blog.Check\ links\ (:make)  :make<CR>

К сожалению, в MacVim не работает использование <Tab> для задания правой части текста пункта меню:
:amenu &File.&Open<Tab>:e  :browse e<CR>
Поэтому я использую ().
После подобных настроек Vim будет иметь вид:



P.S. Для ленивых есть плагин для автоматического построения меню. Но, как и любое универсальное решение, он не очень удобен.

вівторок, 13 січня 2015 р.

Проверка правописания в сообщениях к git-commit’ам

При выполнении коммитов в git-репозитарий было бы неплохо выполнять поиск ошибок в описании к комииту. Для этого необходимо:
  1. Установить vim в качестве редактора git’а (если это еще не сделано):
    git config --global core.editor vim
    
  2. Создать файл ~/.vim/ftplugin/gitcommit.vim:
    setlocal spell
    " Underline misspelled words
    hi clear SpellBad
    hi SpellBad cterm=underline
    
    Я также настраиваю подчёркивание ошибок
  3. Не стоит использовать при коммитах параметр -m message. В этом случае git будет вызывать указанный реактор для редактирования сообщения.
После этих настроек можно использовать средства vim’а для проверки правописания в комментариях к коммитам:

середа, 10 грудня 2014 р.

Не grep’ом единым

Нашёл интересную замену grep‘у: The Silver Searcher. Команда имеет ряд преимуществ перед grep:
  • работает быстрее (можно почитать объяснение автора по поводу способов ускорения)
  • игнорирует файлы, указанные, например, в .gitignore (можно также использовать и .agignore)
  • также автор пишет: “The command name is 33% shorter than ack“. Ну конечно же имя ag в два раза короче grep
Пример для grep:
grep -r CELERYBEAT_SCHEDULE *
Binary file src/.ropeproject/globalnames matches
Binary file src/worker/.celeryconfig.py.swp matches
src/worker/celeryconfig.py:CELERYBEAT_SCHEDULE = {
src/worker/celeryconfig.py:    CELERYBEAT_SCHEDULE["one_per_hour-daylight-%s" % tz] = {
src/worker/celeryconfig.py:    CELERYBEAT_SCHEDULE["three_per_day-%s" % tz] = {
src/worker/celeryconfig.py:    CELERYBEAT_SCHEDULE["one_per_day-%s" % tz] = {
Binary file src/worker/celeryconfig.pyc matches
src/worker/celeryconfig.py~:CELERYBEAT_SCHEDULE = {
src/worker/celeryconfig.py~:    CELERYBEAT_SCHEDULE["one_per_hour-daylight-%s" % tz] = {
src/worker/celeryconfig.py~:    CELERYBEAT_SCHEDULE["three_per_day-%s" % tz] = {
src/worker/celeryconfig.py~:    CELERYBEAT_SCHEDULE["one_per_day-%s" % tz] = {

Как видим, grep обрабатывает лишние файлы. Конечно, можно указать флаг --exclude, но лень :)
Пример для ag:
ag -r CELERYBEAT_SCHEDULE *
src/worker/celeryconfig.py
78:CELERYBEAT_SCHEDULE = {
105:    CELERYBEAT_SCHEDULE["one_per_hour-daylight-%s" % tz] = {
115:    CELERYBEAT_SCHEDULE["three_per_day-%s" % tz] = {
122:    CELERYBEAT_SCHEDULE["one_per_day-%s" % tz] = {

Результат представлен более приятно (и ускорение работы заметно).
Естественно, есть плагин для Vim.

середа, 3 грудня 2014 р.

Крапчасті сомики і деякі можливості Vim

Вчора у мене в акваріумі вперше вилупились малькі крапчастих сомиків. Було вже кілька нерестів в акваріумі з гупіями. Зазвичай ікру самка відкладала на стінках акваріуму. Цього частина ікри була на листку, який я й переклав до банки. Воду в банці я прогрівав десь до 26˚C. Десь за тиждень з’явилось 4 або 5 мальків. Фото поки що не буде, бо малькі дуже маленькі. Сподіваюсь, мені вдасться їх виростити.

P.S. Знак ˚ я виставив за допомогою функціоналу Vim’а, що має назву digraphs - можна вставляти в текст велику кількість подібних спеціальних знаків