vim
Просмотр лога сборки в виме без мигания экрана
Простенькая функция для .vimrc:
" Original idea of backgrounding process by system() and client-server model
" belongs to MarcWeber. Check out his script at
" MarcWeber / vim-addon-background-cmd @ GitHub
" WTFPLv2 © / neverb.net
function! ExecRemote(what)
return 'vim --servername ' . v:servername . ' --remote-expr ' . a:what
endfunction
function! ReloadFile()
call setqflist([],"r")
for i in readfile('/tmp/err')
if i == '0'
continue
endif
exec setqflist([{'text':i}],'a')
endfor
endfunction
function! BuildEmUp()
if v:servername == ''
echo "Run vim as `vim --servername whatever`"
return
endif
if !filereadable("Makefile")
echo "No makefile exists in current directory!"
return
endif
copen
let makeover = 'progress'
let sr = ExecRemote('''feedkeys("\<Esc>:let makeover = \"over\"\<CR>")''')
let gr = ExecRemote('"makeover"')Передвинуть окно в другой таб в vim
Оказывается такой фунции как передвинуть окно в другой таб в vim нет. Зато есть совет на wiki vim-а.
$ mkdir -p ~/.vim/plugin $ wget -O ~/.vim/plugin/win_move_to_tab.vim http://linsovet.com/files/win_move_to_tab.vim
После перезапуска vim-а появится возможность двигать текущее окно в предыдущий и следующий таб по Ctrl-W Ctrl-H и Ctrl-W Ctrl-L соответственно.
Устанавливаем редактор по умочанию в Debian
Разражает когда некоторые утилитки (например vipw, vigr, crontab -e, visudo, ...) запускают какой то непонятный редактор.
Раньше я выходил из положения просто удаляя всякие nano, joe и иже с ними. Но на многопользовательском сервере это не очень хорошее решение.
Обычно такие утилитки используют переменные окружения EDITOR и VISUAL для того что бы определить какой же редактор любимый Ж:-).
Например для того что бы по умолчанию запускался vim нужно добавить в свой ~/.bashrc или ~/.zshrc
export EDITOR=vim
Некоторые утилитки (например edquot -u пользователь) игнорируют эти переменные и запускают editor. Можно выбрать редактор запустив.
$ sudo update-alternatives --config editorОбучающие видео по 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.
- Прыжок к заголовку функции
[[[/code]
- Прыжок назад в исходную позицию [code]''
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


