vim


ramok аватар

Обучающие видео по vim (на английском)

Довольно таки занятные видео для начинающих и не очень.

4
Ваша оценка: Ничего Рейтинг: 4 (1 vote)
zkaje аватар

hex редактирование в vim

шестандцатиричное редактирование в vim делается очень просто:

1. открывается файл

$ vim filename

2. содержимое файла отображается в шестандцаричном виде:

:%!xxd

3. содержимое редактируется по желанию
нажать кнопку i, отредактировать, нажать [esc]

4. полученный результат переводится в обратный вид ASCII

:%!xxd -r

5. сохраняем и выходим

:wq

PS спасибо, ramok

5
Ваша оценка: Ничего Рейтинг: 5 (2 голоса)

Vim. Как воспрeпятствовать перемещению курсора на одну позицию назад при переходе в командный режим по ESC

В связи с тем что попытка переопределить функцию клавиши ESC напрочь убивает стрелки в режиме вставки, пришлось переписать совет. Итак, для начала: а удобна ли клавиша ESC? Авторы вот этой статьи предлагают слепо-быстро-печатникам избавится от ESC, заменив ее на ii или ;;:

" Press i to enter insert mode, and ii to exit.
:imap ii <Esc>

Иногда бывает не совсем в тему отпрыгивание курсора на одну позицию влево при переходе в командный режим. Если так, тогда:

:imap ii <Esc>l
0
Ваша оценка: Ничего
ramok аватар

Как сравнить два бинарных файла

К сожалению я не знаю нормального способа визуального сравнения двух бинарных файлов (что бы нормально отображалось "выпадение байта").

Тем неменее имея zsh и vim, сравнить по быстрому два бинарных файла можно так

$ vim -d =(xxd -g 1 файл1) =(xxd -g 1 файл2)

Объяснения:

  • vim -d - diff режим vim-а, он же запускается командой vimdiff
  • =(xxd -g 1 файл1) - это конструкция zsh, запускает команду внутри =(), сохраняет вывод этой команды во временный файл, и подставляет его имя вместо этой конструкции.

Линки в тему:

0
Ваша оценка: Ничего
ramok аватар

Автоматическое копирование текста из vim в буфер обмена иксов

Постепенно продвигаясь в пути просветления избавления от мышки захотелось мне копировать текст в vim и вставлять в другом vim/терминале/программе без мышки.

Необходимые знания уже имелись и осталось тренировать пальцы в копировании текст в буфер обмена X11 используя специальные регистры "* и "+, и вставке в других программах с помощью Shift-Ins.

Но что бы не ломать себе пальцы, каждый раз указывая нужные регистры, то лучше связать безымянный регистр "" с буфером обмена X11. Тогда любые команды работающие с безымянным буфером по умолчанию (yy, p, dd и подобные) будут работать с системным буфером обмена.

:set clipboard=unnamed,exclude:cons\\\|linux

5
Ваша оценка: Ничего Рейтинг: 5 (2 голоса)
ramok аватар

Как перечитать открытый файл в 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 | endw
0
Ваша оценка: Ничего

Vim. Собственная wiki

Есть замечательный скрипт для vim vimwiki, который позволяет создать собственную wiki...

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)
ramok аватар

Советы работы с содержимым архивов без явной переархивации

В системе обычно присутствует набор утилит облегчающих жизнь при работе с зархивироваными логами или документацией.
Названия этих утилиток начинаются с префикса z: zgrep, zless, zdiff, zmore и подобные.

Так же существует набор утилит для работы bzip2 ахивами (префикс bz*) и zip архивами (префикс zip*).

Кроме того многие утилитки самостоятельно умеют работать с архивироваными файлами. Например: vim, gv умеет открывать ps.gz, pdf.gz, и подобное.

Также в пакете moreutils так же существует утилита zrun, которая автоматически распаковывает файл из рахива и передает его указаной команде.

Примеры использования:

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

Чтение RSS в VIM с помощью Google Reader

По ссылке интересный плагин для vim для использования Google Reader

http://github.com/mattn/googlereader-vim/tree/master

А под катом перевод документации.

0
Ваша оценка: Ничего

Хранение паролей с помощью vim

Если вы любители хранить пароли в зашифрованном файле, далее скрипт для vim, который позволяет это делать удобнее.

0
Ваша оценка: Ничего

Xpdf. Эмуляция vi команд

Далее пример ~/.xpdfrc файла, который содержит горячие клавиши для любителей vi/vim.

0
Ваша оценка: Ничего
ramok аватар

Различные стили автодополнения в командной строке vim

Для тех кто хочет в командной строке vim автодополнение файлов как в bash заносим в ~/.vimrc

set wildmode=longest,list

При нажатии Tab имя файла дополнится до наибольшего совпадения и выведет список альтернатив.

Мне больше нравится автодополнение как в моем zsh

set wildmode=list:longest,full

подробности :help wildmode

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

Компиляция в VIM

Иногда пишем программку (на пример,на Си) и, с целю отслеживания ошибок, компилируем её часто в ходе написания. Чтобы ускорить процесс можно в конфигурационном файле подвесить на горячую клавишу примерно следующее действие:

noremap <S-F9> :!cc -o %< %

Разбор полетов:
S-F9 - по SHIFT-F9
:!cc - запускаем С компилятор
% - имя текущего файла
%< - имя текущего файла без расширения

Таким образом, допустим, редактируем onefile.c . По нажатию SHIFT-F9 в текущей директории выполняется:

cc -o onefile onefile.c

Получаем бинарник с именем = "имя редактируемого файла" без расширения ".с".

0
Ваша оценка: Ничего

VIM. C. В теле какой функции расположен курсор?

Изучая чужие исходники на С, иногда, курсор попадает в большую функцию не помещающуюся целиком в терминальном окне.
Требуется: максимально быстро определить в пределах какой функции находится курсор.
Варианты действий:
1.

  • Прыжок к заголовку функции [[
  • Прыжок назад в исходную позицию ''

2.
Берём из атачмента скрипт и записываем его в ~/.vim/plugin:

% cp Cfname.vim.txt ~/.vim/plugin/Cfname.vim

Получаем следующие горячие клавиши:

  • ff - В командной строке показывается прототип функции
  • fb - Прыжок к началу функции
  • fe - Прыжок в конец функции
  • ft - Прыжок в позицию, в которой курсор находился до fb и fe
  • fs - Включает новый статусбар, на котором (в режиме онлайн) отображается имя функции, в теле которой находится курсор. Данная фича заставляет очень сильно тормозить Vim, при редактировании больших файлов

0
Ваша оценка: Ничего

Vim. Перевод из шестнадатиричной в десятичную систему счисления

:echo 0xff
255

That's all (-:

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

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/

0
Ваша оценка: Ничего

как загнать бинарные данные в исходник

$ 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

5
Ваша оценка: Ничего Рейтинг: 5 (3 голоса)
ramok аватар

Как заставить 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 вам тоже не предложат скачать словари.

Вот и все! Ж:-)

5
Ваша оценка: Ничего Рейтинг: 5 (2 голоса)

Еще один способ быстро выйти из vim

Вместо уже известных :wq и :q! можно пользоваться, соответственно, ZZ и ZQ в командном режиме. Может оказаться удобнее - нажимать нужно на одну клавишу меньше. )

4
Ваша оценка: Ничего Рейтинг: 4 (2 голоса)

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

Используя возможности lftp можно вызвать сторонний редактор для создания/редактирования файла на ftp сервере.

Для этого:

1. Создаем alias для вызова команды редактирования (предположительно используем vim, поэтому так и назовем :)

$ echo 'alias vim source -e ~/.lftp/edit.sh' >> ~/.lftp/rc

2. Создаем сам скрипт для вызова внешней команды редактирования

#!/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.sh

4. Пробуем в полевых условиях :)

$ lftp example.com
lftp :~> vim test
get: Ошибка доступа: 550 Can't open test: No such file or directory
...
4 байта перемещены
lftp :~>

Ясное дело, что если файл бы существовал, то ошибки бы не выводило, пусть это не расстраивает :)

0
Ваша оценка: Ничего