Comments 72
А вот, например, «:read !cat file» чем-либо лучше, чем просто «:r file», кроме того, что курсор в начале оставляет?
ничем =)
я думаю все будет зависит от ситуации, когда где положение курсора вам будет удобней

ps кстати по :r file не знал спасибо =)
":read !cat filename" действительно не имеет смысла.
Есть команды ":read filename" - для вставки после курсора и ":0read filename" - до курсора.
(или их короткий вариант: ":r filename", ":0r filename"
:0read это не перед курсором, а в начало файла. Чтобы прочитать перед курсором надо делать :-1read
Вау, вот это подборочка!
Однозначно в избранное!

У меня про vim тоже кое-что интересное есть, но даже на личный блог кармы нехватает - помогите, кому не жалко, пожалуйста.
А вот кстати тогда вопрос сходу, раз уж на то пошло:
От открытой скобки к закрытой можно с помощью shift+% прыгать, а вот можно ли как-нибудь подобное с xml-тегами вытварять?
На счет последнего, вставка и nnoremap чего-то я не догнал - автоматически 2-ю скобку вставляет? Как то у меня не получилось...
попробуйте вот так
:nnoremap < Esc > P P'[v']=

почему-то хабрахабр съедает <, > несмотрят на то что я пишу их как & l t ; и & g t ;
(кто не верит - могу привести пример)

>а вот можно ли как-нибудь подобное с xml-тегами вытварять?
не работал с xml, но посмотрю
Спасибо, многих вещей не знал! :)

От себя пять копеек. В виме классно работать с табами, но по умолчанию к ним не привязано никаких удобных хоткеев. Я сделал F6/F7 и Ctrl-Right/Ctrl-Left, вот кусок из конфига:


function My_next_file()
if v:version >= 700
tabn
else
bn
endif
endfunction

function My_prev_file()
if v:version >= 700
tabp
else
bp
endif
endfunction

imap <silent><F6> <esc>:call My_prev_file()<cr>i
imap <silent><F7> <esc>:call My_next_file()<cr>i
nmap <silent><F6> :call My_prev_file()<cr>
nmap <silent><F7> :call My_next_file()<cr>

nmap <silent><C-Left> <F6>
nmap <silent><C-Right> <F7>




Еще нравится команда gf - открыть файл, имя которого находится под курсором. Чтобы вим открывал файл в новом табе, можно написать вот так:map gf :tabe <cfile><CR>
Назначать действия на стрелки и F1-F12 - не самая лучшая идея.
Одно из преимуществ Vim в том, что не приходится убирать пальцы с "основной позиции для слепой печати".
Лучше назначать действия на комбинацию близких клавиш.
Читай ":help &#60Leader&#62"

Кстати:
Стандартное сочетание для смены табов - gt(вперёд) и gT(надад) - достаточно удобны
Зато не приходится переходить в командный режим! Ctrl-O g t - это ж четыре клавиши вместо одной, кроме того Ctrl-O часто бывает занят mc.

Но, как я уже сказал, у меня есть еще привязка на сочетание Ctrl + стрелки. Поэтому клавишами F6-F7 я пользуюсь только в режиме вставки и то иногда.
Судя по всему, вы используете Vim, как блокнот - стараетесь не выходить из режима вставки.
Основной режим в Vim - командный. Зачем нажимать Ctrl-O? Нажимайте Esc! Не нужно превращать Vim в Emacs!
Зачем переходить в другую вкладку не выходя из режима вставки? Режим вставки нужен только для вставки текста! :)
Не, вовсе не как блокнот. Дело в том, что мне достаточно часто приходится писать текст, подглядывая на другой файлик из соседней вкладки (какой-нибудь h-ник, например).

Кроме того, gt удобно использовать для перехода на одну вкладку влево, а как вы себе представляете переход на три вкладки? Мне тяжело дается повторение одних и тех же сочетаний, ситуацию усугубляет еще и то, что g и t нажимаются одним пальцем. Нет, это определенно изврат.
Дело в том, что мне достаточно часто приходится писать текст, подглядывая на другой файлик из соседней вкладки (какой-нибудь h-ник, например).
В этом случае удобнее сделать :split, как мне кажется.
Для перехода на конкретную вкладку используйте:
gt{номер вкладки}.
gt5 - на пятую вкладку.

Чтобы видеть номера вкладок, воспользуйтесь статьёй http://habrahabr.ru/blog/vim/46911.html.

Да, и пользуйтесь :split/:vsplit.
:tabe вроде бы не ищет файлы в path и не использует suffixesadd. Так что лучше применить стандартные <C-W>gf
Я имею в виду, что, если хочется переопределить gf для открытия в новом табе, то лучше
:noremap gf <C-W>gf
спасибо, в скором будущем обязательно разберем
если честно - мне кажеться очень важны комметарии людей которые уже давно используют вим в разработке, как правило такие люди говорят мало (мое личное наблюдение), но когда говорят - попадают в точку =)

ps и возможно мне следует писать немного по другому....
Вы бы иностранный язык в заголовке исправили. А лучше убрали бы вовсе.
А можно статью про вим для чайников? =) Про самые-самые основы, какие-нить фишки к которым лучше привыкнуть сразу. В общем чтобы чайник вошел в правильное русло. Лично я был бы крайне благодарен =)
1. Запускаете vim
2. Нажимаете :help<ввод>
3. Втыкаете до позеленения :)

На самом деле единственная основа это наличие трёх режимов (командный, редактирующий и навигационный), что всегда в навигационный можно попасть через [ Esc ], в командный через ":", а начать писать обычно можно через "i". Для чайников командный редко нужен, разве чтобы выйти без сохранения (":q!"), а c сохранением прямо из навигационного можно по "ZZ".
о, сенкс. Основная проблема это в самом начале работы, когда оно запукается, а че куда жать, даже самое примитивное - непонятно нифига =). Посему пока юзаю нано, но как-то несолидно =), ну и не везде он установлен, а vi/vim — классика =)
Поддерживаю! Проверяйте орфографию перед тем как запостить статью. Прочитал первый абзац, читать дальше желание пропало.
Ёмаё, сколько лет использую vim, а всё время узнаю что-то новое. Конкретно спасибо за команды работы с визуальным режимом.
Добавлю что-нить от себя:
function! CMode()
imap { {}O
imap < <>
imap #m int main(int argc, char* argv[]){
iabbrev #d #define
iabbrev #i #include
set tags+=~/.cache/systags
endfunction

function! PyMode()
set makeprg=python\ -c\ \"import\ py_compile,sys;\ sys.stderr=sys.stdout;\ py_compile.compile(r'%')\"
set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
iabbrev imp import
endfunction

au FileType c call CMode()
au FileType cpp call CMode()
au FileType python call PyMode()

Включает дополнительные настройки для C/C++ и Python исходников.

inoremap pumvisible() ? "\" : "\u\

Позволяет выбирать ентером варианта предложенные C-n
ой... ужас какой.. попробуйте http://www.vim.org/scripts/script.php?script_id=1318 для сниппетов
Хорошая статья:) Вообще, если тут есть гуру в vim, хотелось бы рассмотреть вопросы возможности использования этого редактора как stand-alone ide для Java (навигация по коду, автодополнение и все прочее, что есть в современных средах разработки)... Использовал когда-то давно vim как среду разработки для C++ было очень приятно.
UFO landed and left these words here
Расскажите как открыть несколько файлов и все их редактировать, переключаться между ними и т.п....
Я все время забываю.
Чтобы открыть несколько файлов в разных табах(вкладках):
$ vim -p file1 file2 file3 ...
для windows-версии VIM всё вышесказанное справедливо?

имеет ли смысл попробовать vim под win? :) и какие версии есть нормальные?
Да, конечно справедливо. http://www.vim.org/download.php#pc на странице перечислены все доступные сборки для windows.
В Vim под Win возможны небольшие отличия в поведении (подробнее читать в :h :behave и :h mswin.vim), но можно настроить так, чтобы отличий не было вовсе. Ну а пробовать обязательно имеет смысл :) Пользуйтесь gVim и знайте — шрифт по-умолчанию можно (и нужно) поменять (Edit->Select Font... или прямо из gVim :set guifont=*). Чтобы не менять каждый раз можно потом любимый шрифт в _gvimrc прописать.
Прошу добавить во вторую часть работу с кодировками. Как-то оно не совсем понятно. :)
Спасибо, любопытная статья.

PS. Может пропустить её через спеллчекер? ;) Ошибок немало, есть даже в командах.
Надо поменять хотя бы CRTL на CTRL, убрать &rt; и тому подобную чистку сделать. Реально тяжело читать.
:earler Ns,m,h - вернуть содержание файла, которое было s,m,h "time" спустя // наверное, всё же "назад", так как "спустя" - это, как правило, потом (ср. "Мушкетёры 20 лет спустя").

Больше замечаний нет.
На всякий случай сообщаю, что global $db; на $db = Database::get(); удобнее заменять через

:bufdo %s#global $db;#$db = Database::get();#|wn

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

А ещё в последнем абзаце статьи на самом деле говорится о том, что в Vim с седьмой версии запоминаются ВСЕ изменения файла, сделанные в течение сессии, и если вы отменили одно изменение и начали другое, то первое не потеряется, и вы сможете к нему вернуться через g-. Мегафишка.
Если он есть, то это, конечно, прекрасно.
Но - то же самое можно сделать из Vim, в скриптах это может быть полезно.
Ну и в винде sed'а нет и использовать его, учитывая заморочки виндовой командной строки - мучение.

Ещё аргумент - поддержка многих кодировок.
Аргументы понятны, но для меня неактуальны. Винды нет, non-ASCII символов в исходниках нет.
спасибо за замечания
>:bufdo %s#global $db;#$db = Database::get();#|wn

>Кастуется это заклинание, когда все нужные файлы открыты в буферах (не знаю, открываются ли они по grep'у, чукча делает драгндропом).

grep работает и с неоткытимы буферам, поэтому в моем случае удобней был grep

за мега фишку - отельное спасибо, не знал =)
Ну я полагал, что раз рассказали - то знали :) пояснил для читателей, а то не очень понятно было.

Насчет bufdo: если можно список файлов из grep или vimgrep открыть в буферах, то тогда с помощью bufdo можно сделать автоматическую поиск-замену во всез файлах сразу. Пока не знаю, можно ли так открыть файлы из Vim.
А будет статья про то, как всё это запомнить и эффективно использовать?
Советую прочитать статью создателя Vim'a Брама Моленара "7 навыков/привычек эффективного редактирования текстов":
http://www.moolenaar.net/habits_ru.html
Only those users with full accounts are able to leave comments. Log in, please.