Настройка стартового экрана Vim

    Вступление


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

    Установка и базовая настройка


    А поможет нам в этом плагин Startify.

    Для управления плагинами Vim'а я использую Vundle, поэтому добавил в .vimrc следующий фрагмент:

    Plugin 'mhinz/vim-startify'             " Nice start screen
    

    При запуске Vim без указания файлов для открытия данный плагин показывает стартовый экран, на котором перечислены файлы, которые недавно редактировались, а также сессии Vim'а. Также можно указать список файлов, которые всегда будут присутствовать (закладки или bookmarks):

    image

    Для открытия файла теперь достаточно набрать число, которое расположено рядом с файлом в квадратных собках. Также определен ряд команд, например:
    e — создать пустой буфер
    i — создать пустой буфер и перейти в Insert-режим
    q — выйти из Vim

    Чтобы указать файлы для закладок, необходимо прописать в .vimrc:

    let g:startify_bookmarks = ['~/.vimrc',]
    

    Дополнительные настройки


    Плагин позволяет также указать заголовок стартового экрана и подвал (footer). В документации в качестве примера приводится использование фортунок и коровы:

    let g:startify_custom_header = map(split(system('fortune | cowsay'), '\n'), '"   ". v:val') + ['','']
    

    image

    Однако мне такой вариант не совсем нравится. Во-первых, фортунки иногда могут содержать довольно много строк и, как следствие, занимать почти весь экран. Во-вторых, хочется иметь тематические фортунки с советами по Vim. Поэтому я взял файл vim-фортунок с проекта vimtips-fortune, положил его в ~/.vim/fortunes и сформировал dat-файл:

    strfile vimtips
    

    После этого добавил следующую строку в .vimrc
    let g:startify_custom_header = 
        \ map(split(system('fortune ~/.vim/fortunes | cowsay -W 60'), '\n'), '"   ". v:val') + ['','']
    

    Таким образом, получаем уже довольно неплохой стартовый экран:
    image

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

    Настройка смены рабочего каталога


    По умолчанию плагин при открытии файла устанавливает рабочий каталог Vim'а в каталог открываемого файла. Также плагин можно настроить таким образом, чтобы он переключался на корневой каталог системы контроля версий данного проекта:

    let g:startify_change_to_vcs_root = 1
    

    В настоящий момент поддерживаются: git, hg, bzr, svn.

    Такое поведение также не всегда целесообразно. Например, в нескольких моих проектах есть подпроекты, написанные на python. Эти файлы располагаются в отдельных подкаталогах. При открытии таких python-файлов было бы логичнее переключаться именно в этот подкаталог, а не в корневой git'а. Для реализации подобного функционала я использую плагин vim-rooter, который также изменяет рабочий каталог при открытии файла. Плагину можно указать список файлов-маркеров, до которых будет вестись поиск. Так как у меня в python-подкаталогах лежит файлов тегов tags, то я его добавил в список:

    let g:rooter_patterns = ['tags', '.git', '.git/']
    

    Таким образом, с помощью рассмотренных плагинов можно оптимизировать работу с Vim.

    Во мой фрагмент .vimrc с настройками для vim-startify и vim-rooter:

    " Startify
    let g:startify_change_to_dir = 0
    let g:startify_files_number = 8
    let g:startify_bookmarks = ['~/.vimrc',]
    let g:startify_skiplist = ['vimrc',]
    let g:startify_custom_header = map(split(system('fortune ~/.vim/fortunes | cowsay -W 60'), '\n'), '"   ". v:val') + ['','']
    
    " Rooter
    let g:rooter_patterns = ['tags', '.git', '.git/']
    

    Надеюсь, кто-то найдет изложенную информацию полезной для себя.
    Метки:
    Поделиться публикацией
    Комментарии 17
    • +3
      Для правильной работы, как я понимаю, нужен пакет cowsay, который показывает корову и облачко с текстом.
      • 0
        Да, нужны cowsay и fortune.
      • +2
        Спасибо! Оказалось удобно работать с сессиями, теперь для каждого проекта можно создать свою (вместо cd some/path при каждом запуске). В startify есть их автосохранение:

        let g:startify_session_persistence = 1
        


        • +2
          Спасибо!
          Полезный плагин в копилку.
          • +5
            Признайтесь сразу, вы так и не помогли бедным детям в Уганде?
            • 0
              А есть у vim плагин, который восстановит предыдущее состояние всех буферов?
              Создал я например 5 табов, что-то в них понаписал и тут например компьютер выключился. Как быстро открыть эти 5 табов обратно и восстановить набранный там текст? При условии что на диск я их этих табов ничего не сохранял.
              • 0
                Не знаю. Надо читать документацию. Возможно, что и есть.
                • 0
                  Может, ":mksession" вам подойдет + screen?
                  • +2
                    screen точно не подойдет, так как
                    1. это gvim
                    2. отключение компа screen тоже не переживет
                  • 0
                    Могу посоветовать специализированный плагин для работы с сессиями — github.com/szw/vim-ctrlspace.
                    Автосохранение и автооткрытие сессий, переименование вкладок и много чего еще. Нареканий нет.
                    • 0
                      Но если сами файлы не сохранять, то да, они очевидно исчезнут при выключении компьютера…
                      • 0
                        Если открыть в vi несколько пустых табов и написать в них что-то — да, потеряется. Но если это будут не пустые безымянные табы, а открытые существующие на диске файлы — в vim будет работать автосохранение в .swp-файлы, и после перезагрузки он предложит восстановить изменения которые не были сохранены.
                      • 0
                        Спасибо, очень интересный плагин. Думаю поставить, но пока мне просто ctrlp хватало за глаза и табами не сильно пользовался.
                      • 0
                        autosess — при запуске vim без аргументов восстанавливает предыдущее состояние. Состояние сохраняется отдельно для каждого каталога. Так что cd /path/to/project && vi позволяет продолжить работу над этим проектом.
                        • 0
                          У меня сделано так:
                          au VimLeavePre * mksession! ~/.vim/Session.vim
                          и vim запускается с ключем -S ~/.vim/Session.vim
                        • 0
                          спасибо, полезная штука.
                          • 0
                            Спасибо, хороший плагин.

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.