vim

Изображение пользователя ramok.

Приспосабливаем vim к программированию на кросс-компиляторах

Tags: •  •  • 

Первое чего не хватает в vim при работе с кросс-компиляторами - это то что vim не правильно прыгает на подключаемые файлы в #include<..> по клавишам gf, ctrl-w f. А так же не ищет объявление переменных и функций в подключаемых файлах по [d, [D и не прыгает на объявления по [ ctrl-d, ctrl-w d. И не ищет вхождения в подключаемых файлах по [I, [ ctrl-i.

vim-у можно указать где искать подключамые файлы в переменной :set path. Например для кросс компилятора AVR можно указать

:set path=.,/usr/avr/include,,

Так же некоторые кросс компиляторы имеют свою man программу. Например avr кросс-компилятор в Debian имеет avr-man. Что бы работала клавиша вызова man из vim по клавише K можно указать нужную man программу

:set keywordprg=avr-man

Все это можно добавить или в ~/.vimrc или воспользоваться локальным .vimrc в корне проекта.

Изображение пользователя ramok.

Vim и экономия времени

Tags: • 

Вы не знаете как убедить друга попробывать vim? Ж:-)
Дайте ему почитать эту статью-размышление..

Изображение пользователя ramok.

Демо-видео использования плагина tSkeleton в vim

Tags: •  • 

Видео, любезно предоставленное Вадимом, демонстрирует впечатляющие возможности плагина tSkeleton в vim для программирования на C++. Понятное дело что его можно использовать не только для этого Ж:-)

О том как установить и настроить tSkeleton, читайте в блоге Вадима.

Линки в тему:

  1. Шаблоны файлов в vim

Изображение пользователя ramok.

Удобная многострочная подсведка поиска в vim

Tags: •  •  • 

В vim существует возможность подсвечивать найденные поиском слова командой :hlsearch. Но иногда удобно подсвечивать в логах многострочные блоки текста что бы их было видно невооруженным взглядом в огромном логе.

Но проблема в том что в регулярных выражениях точка . обозначает "любой символ кроме перевода каретки" (в отличии от например sed или perl где это действительно "любой символ"). К тому же * как обычно "жадный", что обозначает что если применять его, то будет найдена первая строка первого блока текста и последняя строка последнего блока текста, и подсвечен весь текст между ними. А нам нужно подсвечивать каждый блок в отдельности.

О том как это реализовывается на регулярных выражениях vim и есть этот типс Ж:-)

Как всегда лучше всего разобраться на примере. Допустим нам надо выделять блоки текста в которых первая строчка
содержит слова "RECV signal" или "SEND signal" и заканчиваются строчкой которая содержит "------".

Результат должен выглядеть так:

Белым цветом выделен только что найденый блок текста, желтым - все остальные найденные блоки.

Такого можно добиться командой:

/\(RECV\|SEND\) sig\_.\{-}------.*

Разберем ее по порядку слева на право:

  1. / - соответственно команда поиска в vim Ж:-)
  2. \(RECV\|SEND\) sig - ищем в строке или "RECV sig" или "SEND sig"
    \(\) служат для группировки, \| для выбора вариантов, "или"
  3. \_. - вот это самое интересное Ж:-) эта последовательность обозначает "любой символ включая перевод каретки".
  4. \{-} - это реализация "не жадных" регулярных выражений в vim. в perl это аналог *?. Если вместо
    этого поставить банальный * то vim будет искать самое последнее вхождение последующих символов.
  5. ------ - это мы ищем в последующих строках строку "------".
    Итого \_.\{-}------ обозначает "пропустить любое кол-во символов (включая перевод каретки) до тех пор пока первый раз не найдем строку ------"
  6. .* - тут нужен что бы посветить остатки строки в которой найдена строка "------".

Вот собственно говоря и все Ж:-)

.vimrc в подкаталогах

Tags: •  •  •  • 

Иногда случается полезным устанавливать некоторые настройки vim специфично для отдельных каталогов/подкаталогов.

Вот небольшой скриптец, который подгружает .vimrc из каталога, в котором открывается или создаётся файл.

function! Load_local_rc(dir)
  if a:dir == expand("~")
    return
  endif
  let rcfile = a:dir."/".".vimrc"
  if ! filereadable(rcfile)
    return
  endif
  execute "source ".rcfile
endfunction

autocmd BufReadPre * call Load_local_rc(expand("<afile>:p:h"))
autocmd BufNewFile * call Load_local_rc(expand("<afile>:p:h"))

Дружелюбная конфигурация vim с нуля

Tags: •  •  •  •  • 

Устанавливая vim в разных системах можно заметить, что чаще всего он ведет себя "совместимо" с vi. Это проявляется в первую очередь в реакции на нажатия курсорных клавиш в режиме вставки (портит текст =)). Отвечает за такое поведение опция "set nocompatible", но есть еще более простой способ получить дружественный конфигурационный файл vim по-умолчанию:

$ locate vimrc

Отыскать среди вариантов vimrc_example и...
$ cp /путь/к/примеру/vimrc ~/.vimrc

Изображение пользователя ramok.

Посмотреть список подключенных к vim скриптов

Tags: • 

Если слишком активно устанавливать скрипты для vim, то рано или поздно наступит ситуация когда забывается какие скрипты уже установлены. Посмотреть список скриптов подключенных к vim

:scriptnames

Изображение пользователя ramok.

Перевод слов не выходя из vim

Tags: •  •  •  • 

Установим консольный клиент StarDict и настроим кой какие словари.

$ apt-get install sdcv
$ mkdir -p ~/.stardict/dic/
$ cd ~/.stardict/dic/
# русско-англиский и англо-русский словари и Анг
$ wget http://heanet.dl.sourceforge.net/sourceforge/stardict/stardict-{ER,RE}-LingvoUniversal-2.4.2.tar.bz2
$ wget http://heanet.dl.sourceforge.net/sourceforge/stardict/stardict-lingvo-{ER,ER}-Computer-2.4.2.tar.bz2
# русско-немецкий и немецко-русский словари
$ wget http://heanet.dl.sourceforge.net/sourceforge/stardict/stardict-{GR,RG}-LingvoUniversal-2.4.2.tar.bz2
$ for i in *.bz2; tar jvf $i; done
# опционально - удалить все
$ rm *.bz2
$ 

Берем плагин к vim translateit и настраиваем его

$ wget -O translateit.vim http://www.vim.org/scripts/download_script.php\?src_id\=7836
$ mkdir -p ~/.vim/plugin
$ mv translateit.vim ~/.vim/plugin

Проверяем как работает:
открываем любой файл, наводим курсор на нужное слово и жмем \d или ,d в зависимости от ваших настроек <Leader>.
В результате у вас должно открыться новое окно с вариантами переводов. Закрыть окно в :q или переключится между окнами Ctrl-W Ctrl-W.

Изображение пользователя ramok.

Настройка vim для редактирования исходников ядра linux

Tags: •  •  •  •  • 

http://www.jukie.net/~bart/blog/20070209172606
Немного не кошерно, так как лучше запихнуть это все в ~/.vim/ftplugin/c.vim, но основные настройки можно брать отсюда если есть желание постить патчи для ядра.

Изображение пользователя ramok.

Редактирование полей в формах в elinks с помощью стороннего редактора

Tags: •  • 

Так же как в firefox, в elinks имеется возможность редактировать поля <textarea> во внешнем редакторе. Находясь в поле ввода можно выбрать в меню Link->Open in external editor, или просто нажать F4 или Ctrl-T.

PS
По причинам внутренней архитектуры elinks эту особенность можно использовать только в главной запущенной копии elinks в сессии с одинаковым номером.

Создание базы ctags для изучения SELinux Reference Policy

Tags: •  •  •  • 

По умолчанию ctags не включает почти ничего при сканировании политики SELinux. В дебрях рассылок набрёл на патч, создал скрипт и сохранил, чтобы не забыть

#!/bin/sh

SE_PATH=usr/src/selinux-policy-refpolicy-src

ctags --langdef=te --langmap=te:..te.if.spt \
    --regex-te='/^type[ \t]+(\w+)(,|;)/\1/t,type/' \
    --regex-te='/^typealias[ \t]+\w+[ \t+]+alias[ \t]+(\w+);/\1/t,type/' \
    --regex-te='/^attribute[ \t]+(\w+);/\1/a,attribute/' \
    --regex-te='/^[ \t]*define\(`(\w+)/\1/d,define/' \
    --regex-te='/^[ \t]*interface\(`(\w+)/\1/i,interface/' \
    --regex-te='/^[ \t]*bool[ \t]+(\w+)/\1/b,bool/'\
    $SE_PATH/policy/modules/*/*.{if,te} $SE_PATH/policy/support/*.spt

Ну и в vim

set tags=<путь к базе, созданной ctags>

Изображение пользователя ramok.

Поиск в vim без/с учетом регистра букв

Tags: • 

В vim существует множество способов поиска текста. Для всех команд можно настраивать будет ли происходить поиск с учетом регистра или нет.

:set ignorecase # Включить игнорирование регистра при поиске
:set noignorecase # Отключить игнорирование регистра при поиске

Есть опция "умного" выбора регистра букв. То есть если запрос поиска содержит только маленькие буквы - будет поиска с игнорированием регистра. Если хоть одна буква будет большая - поиск будет с учетом регистра. Опция для включения/выключения:

:set smartcase
:set nosmartcase

Можно отключать/включать опцию игнорирования регистра в текущем поиске с помощью модификаторов \c и \C. Где находится модификатор не имеет значения.
Например:

/\cслово  # искать "слово" игнорируя регистр не зависимо от настроек
/слово\C  # искать "слово" учитывая регистр не зависимо от настроек

PS
лично я предпочитаю noignorecase, и при необходимости использую \c

Изображение пользователя ramok.

Клавиши инкремента/декремента в a-la-vim в zsh

Tags: •  • 

В продолжении темы переноса удобных фич из vim в zsh Ж:-)
В vim есть такая приятность как Клавиши инкремента/декремента в vim. В zsh в contrib есть скрипт который делает подобно, но он не прыгает до ближайшего числа в строке вправо, как в vim. То есть хотелось бы
в командном режиме эмуляции vi в zsh иметь такие же клавиши инкримента (ctrl-a) и декримента (ctrl-z (так как ctrl-x занят в zsh на множество функций)).

1. Устанавливаем в ~/.zsh/function нужные там фунции

$ mkdir -p ~/.zsh/function
$ cd ~/.zsh/function
$ wget http://rusmafia.org/linux/files/vi-add-numeric.txt -O vi-add-numeric
$ wget http://rusmafia.org/linux/files/vi-substract-numeric.txt -O vi-substract-numeric

2. Добавляем в свой ~/.zshrc

bindkey -v                     # режим эмуляции vi клавишь
fpath=(~/.zsh/function $fpath) # добавляем директорию где будут лежать
                               # наши функции

# подружаем нужные нам фунции и вешаем их на клавиши ctrl-a и ctrl-z
autoload -U vi-add-numeric vi-substract-numeric
zle -N vi-add-numeric
zle -N vi-substract-numeric
bindkey    "^A" vi-add-numeric
bindkey -a "^A" vi-add-numeric
bindkey    "^Z" vi-substract-numeric
bindkey -a "^Z" vi-substract-numeric

3. Перегружаем zsh и пробуем Ж:-)

Изображение пользователя ramok.

Как узнать информацию о тексте в vim

Tags: •  • 

Случается что нужно узнать полное имя текущего редактируемого файла в vim (что бы скопировать его мышкой и вставить куда нибуть). Жмем ctrl-g в командном режиме.

g<ctrl-g> - Узнать сколько букв/слов/линий выделено в визуальном режиме. Или сколько букв/слов/линий вообще в файле,
если нажать это в командном режиме.

Изображение пользователя ramok.

Замена табуляции четырмя пробелами в vim

Tags: • 

"Как заменить таб на 4 пробела?" Часто возникающий у программистов вопрос.
Ответ:
добавляем в ~/.vimrc

set tabstop=4 shiftwidth=4 expandtab

Изображение пользователя ramok.

vim-like клавиша вызова помощи в zsh

Tags: •  •  • 

В zsh, при редактировании большой команды, часто не хватает вызвать помощь что бы подсмотреть забытый параметр. Можно конечно посмотреть в другой консоли, но можно вот если бы можно было нажать магическую клавишу, прочитать показанную помощь, и продолжить редактирования команды... С другой стороны в vim есть замечательная возможность вызывать man для слова под курсором. Почему бы не перенести эту возможность из vim в zsh? Ж:-)

1. Заносим в ~/.zshrc

# zsh будет работать в "vi режиме"
bindkey -v

# так же как в vim, K будет вызывать помощь для команды, в командном режиме
bindkey -a K run-help

2. Теперь во время редактирования команды достаточно перейти в командный режим "vi режима" (жмем esc) и затем жмем "K".

Отличие поведение этой команды от vim, в том что помощь будет вызываться не для слова под курсором, а для команды в начале строки.
Так же приятная особенность в том что для встроенных команд zsh будет показан соответствующий раздел помощи zsh.

Удобное и быстрое комментирование в vim

Tags: •  •  • 

Недавно мне захотелось в vim комментировать код быстрее, чем я это делал раньше, то бишь не вручную :) Потратив некоторое время на vim.org в поиске необходимого плагина, я остановился на том, который, по моему мнение, наиболее вписывается в концепцию vim - NERD Commenter! Стиль комментариев зависит от типа файла, который вы открыли. Поддерживаемых типов достаточное количество :)

Комбинации клавиш по-умолчанию:

,cc - комментирование текущей строки или выделенного текста
,cn - закомментировать/раскомментировать
,ci - то, что было закомментировано раскомментировать и наоборот
,cs - сексуальное комментирование ;-)
,cy - перед комментированием выполнить yank
,c$ - закомментировать от текущей позици курсора до конца строки
,cI и ,cA - добавить комментарии в начало и в конец строки соответственно
,cl, cr, cb - комментировать, выравнивая символы комментария по левому, по правому краю или растягивая соответственно
,cu - раскомментировать

Цветовые схемы в vim

Tags: •  • 

Полезный ресурс для выбора цветовой схемы. Не нужно ничего качать, устанавливать и переключать. Все в одном месте и с картинками ;-)

http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html

Редактирование полей в формах в Firefox с помощью стороннего редактора

Tags: •  •  • 

Всегда хотелось набирать сообщение в форме, использую свой редактор, а не убогий
интерфейс <textarea>. С помощью плагина для Firefox можно для редактирования
полей использовать любой редактор.

Например...vim ;)

В интернет с vim-клавишами!

Tags: •  •  •  • 

Да, всегда хотелось смотреть страницы не дотрагиваюсь до мыши, а иногда и с
помощью vim клавиш. Нажимаешь gg и перемещаешься вверх, нажимаешь G - вниз.
C-b, C-f, наконец вместо стрелочек использовать j и k.

И теперь это возможно с помощью плагина для firefox. Свободный броузер
превращается в Vimperator :)

https://addons.mozilla.org/en-US/firefox/addon/4891

RSS-материал