Окна и буферы

    В vim 7 появились табы — привычный способ навигации по файлам. Когда я работал в eclipse я не раз замечал, что часто скакать между табами не удобно, а знакомство с буферами в emacs натолкнуло на прочтение документации по окнам/буферам в vim.



    И так, буфер это некий сеанс редактирования определённого файла. К примеру если вы открыли .vimrc и в запущенном виме выполнели :e .bashrc, то откроется .bashrc. Тем не менее буфер с .vimrc останется открытым и доступным для редактирования. Вот основные команды для работы с буферами:
    :bn следующий буфер
    :bp предыдущий
    :ls просмотреть открытые буферы
    :b имя_буфера переключиться на буфер, очень удобно комбинируется с табом, к примеру пишем :b domain, жмём таб и нам подставляется открытый iis_domain.cpp
    :bd удалить текущий буфер, правда стоит заметить, что если этот буфер единственное окно то vim закроется
    :bd имя_буфера удалить буфер по имени

    Чем хороши буферы по сравнению с табами? Во первых в vim табы — это теже буферы, только навигация по ним проходит по иному. Проблема табов в том, что они нацелены на визуальную навигацию, а когда вы увлечённо программируете в vim, вам как и мне наверное лень тянуться до мыши и вы точно знаете какой файл хотите редактировать, пишите :b имя — и всё! Ну это конечно же моё имхо :)

    С буферами разобрались, поехали дальше. Как я сказал в первом абзаце — иногда нужно часто скакать между файлами, и не табы не буферы просто так проблему не решают. Гораздо удобнее было бы разбить окно на два по вертикали или горизонтали. Сразу из места в карьер, боевой пример: вам нужно узнать определение какой-то функции, если тэги сгенерированны, то достаточно нажать Ctrl-] чтобы перейти на него. Но откроется новый буфер, что не очень удобно. Если же нажать Ctrl-w ] то окно будет разбито по вертикали, и в новом окне будет определение.
    Удобно? Мне да. Окошко можно закрыть старым добрым :q или удалить буфер :bd. Чтобы сделать окно единственным (читай развернуть), то выполняем комбинацию Ctrl-w o. Краткое описание работы с окнами:
    Ctrl-w стрелочки :) — переместиться на окно влево/вправо/вверх/вниз
    Сtrl-w o — развернуть окно
    Ctrl-w c — закрыть
    Ctrl-w s — разделить окно по горизонтали
    Ctrl-w v — тоже, только по вертикали
    Ctrl-w ] — разделить и перейти на определение чего-то, что под курсором
    Ctrl-w f — разделить и в новом окне открыть файл путь к которому находится под курсором, очень удобно делать на инклюдах
    Команды:
    :split — разделить, если указан файл то открыть его
    :vsplit — тоже только по вертикали
    :sb[uffer] — разделить и редактировать буффер. Важный момент: если заново открыть файл (к примеру через :split) то буфер сбрасывается, вместе с историей отмен и положением курсора

    Собственно про навигацию в vim рассказал всё, что хотел, за помощью обращайтесь в :help window. Хочу лишь добавить про дополнение текста.

    Дополнение в vim делается по Ctrl-n, Ctrl-p. Но мы можем указать какой тип дополнений хотим увидеть:
    Ctrl-x Ctrl-f — файлы, они ищутся в текущем каталоге
    Ctrl-x Ctrl-d — дефайны
    Ctrl-x Ctrl-i — слова из текущего и открытых файлов
    Ctrl-x Ctrl-k — из словаря
    Ctrl-x Ctrl-] — все тэги
    Ctrl-x Ctrl-o — omni completion, эдакий intellisense который работает замечательно с C, Python и т.д. но для работы C++ нужен сторонний плагин. Рекомендую.

    Надеюсь был полезен.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 34

      0
      Можно было ещё упомянуть плагины для более удобной работы с буферами. Например, bufexplorer.
        0
        Я его пользовал раньше, потом вышел vim 7, потом даже эмуляция табов стала не нужна. Но вообще мне bufexplorer нравился больше, чем табы в vim 7.
        • UFO just landed and posted this here
        0
        Спасибо! Vim’ом владею весьма поверхносно, а случайно открытых буферов на пол окна, вообще пугался.
        Так что ваша информация была для меня действительно полезной.
          0
          Для тех, кто только осваивает вим, будет полезен режим мыши, котороый задается командой :set mouse=a. Советую попробовать :)
            0
            Ну, в общем я общаюсь с консольным вимом, где эта фича не работает.
            Но при наличии времени поиграюсь и с графическим.
              0
              Пользуюсь исключительно консольным, в терминале Terminal(xfce-terminal). Там это работает. Вроде бы и в xterm работало. Но не ручаюсь, потому что давно им не пользовался.
                0
                У меня сейчас убунта, стоит до лучших времен. В vimrc даже не лазил, сходу эта фича не включается. Возможно если там че-то покрутить, то можна заставить ее работать.
                  0
                  Чтобы мышка работала и в буфер иксов копировалось нужен vim-gnome/vim-gtk. При том чтобы работало в консольной версии :)
              0
              Да и не только, mouse=a удобно чтобы в терминале те самые окошки ресайзить.
            0
            На счёт неудобства табов, это вы их не умеете готовить :) Например, у меня на C-Left, C-Right стоит бинд на :tabp, :tabn. Передвигаться ужасно удобно. Но, всё на любителя.
              0
              Если задача передвигаться просто влево вправо - то может быть. Но если передвигатся как угодно... (%
              Вим давно снес, но на сколько помню разбивка окна - только на уровне буфферов, так что голые табы не катят. К тому же идентификатор таба занимает место сверху.
                0
                А какой редактор у вас сейчас?
                  0
                  На емагз переехал
                0
                Знаете, до tabn я наверное додумался :) как и повещать на Alt-номер tabn 1, tabn 2 и т.д. Так что правда на любителя.
                  0
                  в гноме alt+n работают во многих приложениях по умолчанию
                    0
                    Да, особенно в gnome-terminal, по этому от затеи отказался.
                  0
                  А я ничего мапил.. Есть стандартные горячие клавиши для перемещения между табами: Ctrl+PageUp и Ctrl+PageDown.

                  Привык к ним ещё на eclipse.
                    0
                    Тоже кстати проблема, в gnome-terminal они используются :)
                      0
                      Именно поэтому я в gnome-terminal или в terminal для vim открываю отдельное окно, а для mc и cmus использую другое окно с вкладками.
                        0
                        Ну, чем не вариант :)
                  +1
                  Был бы под вим electric-buffers.. :)
                  Вообще буфферы самое удобное решение для многооконного редактора.
                    +3
                    Если бы не был бескарменным новичком - поставил бы вам множество плюсов. Очень полезный пост, спасибо!
                      0
                      Ctrl-x Ctrl-o - omni completion, эдакий intellisense который работает замечательно с C, Python и т.д. но для работы C++ нужен сторонний плагин. Рекомендую.


                      интересует php, есть ли дня него какие либо intellisense плагины ?
                        0
                        Да, как говориться "искаропки". Естественно нужен сгенерированный tags файл.
                          0
                          вы не в курсе, возможно ли ctags использовать для php ?
                          если есть такие люди кто связывал его с php, отпишитесь плз
                          (зарание извеняюсь за коммент, возожно я написал глупость, просто не имел дело с ctags =(
                            +1
                            Может конечно, как и с python. Ставим exuberant-ctags, с проекте делаем ctags *, появляется файлик tags, vim сам его найдёт.
                      • UFO just landed and posted this here
                          +2
                          Про стрелочки - хорошо сказано :) осталось напомнить, что "стрелочки" - это h,j,k,l

                          А еще C-w H (J,K,L) сделает текущее окно самым левым (нижним, верхним, правым).


                          С-w _ развернет окно до максимального размера
                          C-w = сделает все окна текущего таба одинаковыми
                          C-w N+ (N-) увеличит (уменьшит) текущее окно на N строк

                          Happy Vimming!
                            +1
                            Полезная комбинация для навигации:
                            Ctrl-w w - переходит на следующее окно циклически, удобно при двух октрытых окнах, например исходник + хедер.

                            Получается такая последовательность команд для редактирования:
                            vim file.cpp
                            vsplit file.hpp
                            дальше можно переключаться с помощью Ctrl-w w
                              0
                              Угу, сам пользуюсь, а упомянуть в статье забыл :)
                                0
                                Кстати для переключения между исходником и хедером полезно использовать вот этот плагинчик.
                                0
                                перемещаюсь между табами по gt, gT, gt ( - номер таба). Вполне удобно
                                  0
                                  Ctrl-W K — вертикальные окна, сделает горизонтальными.
                                  Ctrl-W H — горизонтальные окна, сделает вертикальными.

                                  Only users with full accounts can post comments. Log in, please.