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"')
4.333335
Ваша оценка: Ничего Рейтинг: 4.3 (3 голоса)
ramok аватар

Передвинуть окно в другой таб в 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 соответственно.

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

Устанавливаем редактор по умочанию в Debian

Разражает когда некоторые утилитки (например vipw, vigr, crontab -e, visudo, ...) запускают какой то непонятный редактор.
Раньше я выходил из положения просто удаляя всякие nano, joe и иже с ними. Но на многопользовательском сервере это не очень хорошее решение.

Обычно такие утилитки используют переменные окружения EDITOR и VISUAL для того что бы определить какой же редактор любимый Ж:-).
Например для того что бы по умолчанию запускался vim нужно добавить в свой ~/.bashrc или ~/.zshrc

export EDITOR=vim

Некоторые утилитки (например edquot -u пользователь) игнорируют эти переменные и запускают editor. Можно выбрать редактор запустив.

$ sudo update-alternatives --config editor
0
Ваша оценка: Ничего
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.

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

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 голоса)