vim
Обучающие видео по vim (на английском)
Довольно таки занятные видео для начинающих и не очень.
hex редактирование в vim
шестандцатиричное редактирование в vim делается очень просто:
1. открывается файл
$ vim filename2. содержимое файла отображается в шестандцаричном виде:
:%!xxd
3. содержимое редактируется по желанию
нажать кнопку i, отредактировать, нажать [esc]
4. полученный результат переводится в обратный вид ASCII
:%!xxd -r
5. сохраняем и выходим
:wq
PS спасибо, ramok
Vim. Как воспрeпятствовать перемещению курсора на одну позицию назад при переходе в командный режим по ESC
В связи с тем что попытка переопределить функцию клавиши ESC напрочь убивает стрелки в режиме вставки, пришлось переписать совет. Итак, для начала: а удобна ли клавиша ESC? Авторы вот этой статьи предлагают слепо-быстро-печатникам избавится от ESC, заменив ее на ii или ;;:
" Press i to enter insert mode, and ii to exit. :imap ii <Esc>
Иногда бывает не совсем в тему отпрыгивание курсора на одну позицию влево при переходе в командный режим. Если так, тогда:
:imap ii <Esc>l
Как сравнить два бинарных файла
К сожалению я не знаю нормального способа визуального сравнения двух бинарных файлов (что бы нормально отображалось "выпадение байта").
Тем неменее имея zsh и vim, сравнить по быстрому два бинарных файла можно так
$ vim -d =(xxd -g 1 файл1) =(xxd -g 1 файл2)Объяснения:
- vim -d - diff режим vim-а, он же запускается командой vimdiff
- =(xxd -g 1 файл1) - это конструкция zsh, запускает команду внутри =(), сохраняет вывод этой команды во временный файл, и подставляет его имя вместо этой конструкции.
Линки в тему:
- Как съесть один пирог дважды: bash, tee, process substitution
- Нелинейные конвейеры
- Чем отличаются уровни оптимизации -O в gcc?
Автоматическое копирование текста из vim в буфер обмена иксов
Постепенно продвигаясь в пути просветления избавления от мышки захотелось мне копировать текст в vim и вставлять в другом vim/терминале/программе без мышки.
Необходимые знания уже имелись и осталось тренировать пальцы в копировании текст в буфер обмена X11 используя специальные регистры "* и "+, и вставке в других программах с помощью Shift-Ins.
Но что бы не ломать себе пальцы, каждый раз указывая нужные регистры, то лучше связать безымянный регистр "" с буфером обмена X11. Тогда любые команды работающие с безымянным буфером по умолчанию (yy, p, dd и подобные) будут работать с системным буфером обмена.
:set clipboard=unnamed,exclude:cons\\\|linux
- Копирование текста из vim в буфер обмена иксов
- Вставка текста из клипбоарда в терминале без мышки
- Вставка в vim текста из клипбоарда
Как перечитать открытый файл в vim
Если вы редактируете файл, и его изменила какая то внешнаяя программа то его можно перечитать с помощью команды :edit без параметров или просто :e. Если файл уже изменен вами локально, то можно потерять изменения перечитав файл с помощью :e!.
Не очевидно, и удобно для тех кто пользуется cvs, svn, git и подобное.
Опции в тему
:help autoread # автоматически перечитывать файл при его изменении :help noconfirm # опция вкл./выкл. предупреждение о потере несохраненных данных :setlocal autoread # установить опцию автосчитывания для локального буфера :setl ar # тоже самое, только укороченный вариант
Учтите что автосчитываение происходит только в случае пользовательских событий, тоесть пользователь работает с редактором. Хотя если хочется превратить vim в аналог tail -f можно сделать так:
: set nolz | while 1 | e | redraw | $ | sleep 1 | endwVim. Собственная wiki
Есть замечательный скрипт для vim vimwiki, который позволяет создать собственную wiki...
Советы работы с содержимым архивов без явной переархивации
В системе обычно присутствует набор утилит облегчающих жизнь при работе с зархивироваными логами или документацией.
Названия этих утилиток начинаются с префикса z: zgrep, zless, zdiff, zmore и подобные.
Так же существует набор утилит для работы bzip2 ахивами (префикс bz*) и zip архивами (префикс zip*).
Кроме того многие утилитки самостоятельно умеют работать с архивироваными файлами. Например: vim, gv умеет открывать ps.gz, pdf.gz, и подобное.
Также в пакете moreutils так же существует утилита zrun, которая автоматически распаковывает файл из рахива и передает его указаной команде.
Примеры использования:
Чтение RSS в VIM с помощью Google Reader
По ссылке интересный плагин для vim для использования Google Reader
http://github.com/mattn/googlereader-vim/tree/master
А под катом перевод документации.
Хранение паролей с помощью vim
Если вы любители хранить пароли в зашифрованном файле, далее скрипт для vim, который позволяет это делать удобнее.
Xpdf. Эмуляция vi команд
Далее пример ~/.xpdfrc файла, который содержит горячие клавиши для любителей vi/vim.
Различные стили автодополнения в командной строке vim
Для тех кто хочет в командной строке vim автодополнение файлов как в bash заносим в ~/.vimrc
set wildmode=longest,list
При нажатии Tab имя файла дополнится до наибольшего совпадения и выведет список альтернатив.
Мне больше нравится автодополнение как в моем zsh
set wildmode=list:longest,full
подробности :help wildmode
Компиляция в VIM
Иногда пишем программку (на пример,на Си) и, с целю отслеживания ошибок, компилируем её часто в ходе написания. Чтобы ускорить процесс можно в конфигурационном файле подвесить на горячую клавишу примерно следующее действие:
noremap <S-F9> :!cc -o %< %
Разбор полетов:
S-F9 - по SHIFT-F9
:!cc - запускаем С компилятор
% - имя текущего файла
%< - имя текущего файла без расширения
Таким образом, допустим, редактируем onefile.c . По нажатию SHIFT-F9 в текущей директории выполняется:
cc -o onefile onefile.c
Получаем бинарник с именем = "имя редактируемого файла" без расширения ".с".
VIM. C. В теле какой функции расположен курсор?
Изучая чужие исходники на С, иногда, курсор попадает в большую функцию не помещающуюся целиком в терминальном окне.
Требуется: максимально быстро определить в пределах какой функции находится курсор.
Варианты действий:
1.
- Прыжок к заголовку функции
[[ - Прыжок назад в исходную позицию
''
2.
Берём из атачмента скрипт и записываем его в ~/.vim/plugin:
% cp Cfname.vim.txt ~/.vim/plugin/Cfname.vim
Получаем следующие горячие клавиши:
- ff - В командной строке показывается прототип функции
- fb - Прыжок к началу функции
- fe - Прыжок в конец функции
- ft - Прыжок в позицию, в которой курсор находился до fb и fe
- fs - Включает новый статусбар, на котором (в режиме онлайн) отображается имя функции, в теле которой находится курсор. Данная фича заставляет очень сильно тормозить Vim, при редактировании больших файлов
Vim. Перевод из шестнадатиричной в десятичную систему счисления
:echo 0xff 255
That's all (-:
Vim. Выполнение действий во всех открытых буферах
Для замены FOO на BAR в открытом файле, обычно выполняете:
:%s/FOO/BAR/g
А теперь для всех отрытых файлов:
:bufdo :%s/FOO/BAR/g|:w
Это переводится как: для всех открытых буферов заменить FOO на BAR и записать изменения.
Ссылка:
http://blog.viridian-project.de/2008/10/02/vim-substitute-in-all-buffers/
как загнать бинарные данные в исходник
$ xxd -i binary_file > binary_header.hпоместит в файл binary_header.h дамп файла binary_file в виде:
unsigned char binary_file[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, /* ........... */ }; unsigned int binary_file_len = 340;
xxd является частью пакета vim
Как заставить vim предолжить вам скачать словари для проверки орфограф
Когда то давно написал совет по проверке правописания в vim в котором упомянул что, теоретически vim должен сам предлагать скачивать нужные словари при необходимости, но вопрос остался открытым. И вот теперь на пару с товарищем stasikos мы грокнули эту проблему Ж:-)
Итак самое главное: для того что бы предложить скачать словари, vim-у нужно место куда их сохранить. И если вы работаете под простым пользователем у которого нет права писать в что то подобное /usr/share/vim/vim71/spell то вам и не предложат скачать словари, а просто упомянут о их отсутствии (например Warning: Cannot find word list "ru.utf-8.spl" or "ru.ascii.spl").
Отсюда выход номер раз: запустить vim под root и набрать :set spell spelllang=ru.
Но это не наш метод (а вдруг нет прав root?) Ж:-)
Лучше создать директорию в которую vim сможет сохранить словари под правами пользователя:
$ mkdir -p ~/.vim/spell
И дальше точно так же как советуется выше.
Внимание:
Учтите что запрос на скачивание задается только один раз после запуска vim. И если вы запустили vim и только потом создали ~/.vim/spell вам тоже не предложат скачать словари.
Вот и все! Ж:-)
Еще один способ быстро выйти из vim
Вместо уже известных :wq и :q! можно пользоваться, соответственно, ZZ и ZQ в командном режиме. Может оказаться удобнее - нажимать нужно на одну клавишу меньше. )
Редактирование файлов на FTP с помощью lftp
Используя возможности lftp можно вызвать сторонний редактор для создания/редактирования файла на ftp сервере.
Для этого:
1. Создаем alias для вызова команды редактирования (предположительно используем vim, поэтому так и назовем :)
$ echo 'alias vim source -e ~/.lftp/edit.sh' >> ~/.lftp/rc2. Создаем сам скрипт для вызова внешней команды редактирования
#!/bin/sh tempid=$$ echo get $1 -o /tmp/$tempid$1 echo shell vim /tmp/$tempid$1 echo put -E /tmp/$tempid$1 -o $1
3. Делаем его исполняемым
$ chmod +x ~/.lftp/edit.sh4. Пробуем в полевых условиях :)
$ lftp example.com lftp :~> vim test get: Ошибка доступа: 550 Can't open test: No such file or directory ... 4 байта перемещены lftp :~>
Ясное дело, что если файл бы существовал, то ошибки бы не выводило, пусть это не расстраивает :)


