Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Vim на прокачку

with 8 comments

Якщо ви по 8 годин на добу, 5 днів на тиждень дивитесь в код, треба зробити це заняття для себе якомога кофортнішим. Особливо якщо ви плануєте займатись цим наступні N-дцять років. Ітак, за останні два місяці мій Vim прокачався як ніколи до того, і навіть дойшов до такої межі, що я вже поглядаю в сторону Emacs. (Vim скриптується звісно, але для зручного управління GUI його скриптів недостатньо). Тому на численні (численними вважається будь-яка кількість більше нуля:) ) прохання розповідаю про свої налаштування.

Далі мова йтиме про gVim, бо він дозволяє прокрутку колесиком миші, виділення мишею, перемикання вкладок і перетягування меж буферів теж мишею. Власне я зрідка користуюсь лише першим і останнім, але це крім того зручніше іншим які хочуть почитати мій код.

Для початку варто поставити гарну кольорову схему, бо код доведеться бачити частіше ніж шпалеру на робочому столі. Раніше я користувався дефолтною в Vim терміналі Guake. Коли перейшов на Gvim – дефолтна дуже не сподобалась. Переключив на elflord, хоча вона теж була не надто гладка для очей. Мені сподобалась здерта з МакОСівського TextMate тема blackboard. Виглядає так:

Робочий стіл

Ліва і нижня панелі позазані для наочності і понтів, в робочому режимі прибираються і екран заповнений просто півтора мегапікселями коду. І згадавши про пікселі, меню, панель інструментів, і всякі інші гуйовини в Vim потрібні як п’яте колесо. Їх можна легко прибрати (далі починається .vimrc)

set guioptions=’  " clear some more space

Тут ми присвоюємо значення рядковій змінній яка містить всі елементи GUI які потрібно відображати закодовані буквами. Я довго читав довідку по цій змінній, і вирішив очистити все геть-зовсім.

Далі, я описав деякі двокрапочні команди:

command! Dir :Explore %:p:h

Ця команда відкриває Vim-івський файловий менеджер в директорії в якій знаходиться файл поточного буферу. Дозволяє переглянути сусідні модулі, а також відкривати й видаляти останні. Знак оклику написаний для того, аби Vim не протестував коли я перезавантажую конфіг після редагування командою source %.

commandnargs=1 Find :!find /home/bunyk/workspace/uaprom/uaprom/  type f \( name ‘*.py’ o name ‘*.mako’ o name ‘*.js’ \) | xargs grep n <args> | sed ‘s/\/home\/bunyk\/workspace\/uaprom\/uaprom//g’ | less
commandnargs=1 Blame :!hg blame vu % | cat n | grep <args>

Перша команда – повнотекстовий пошук по проекту. Реалізований через одне місце, і взагалі його треба переписати так, аби можна було зразу відкривати результати пошуку в поточному буфері. Я цим колись займусь. Поки що – дивіться і жахайтесь.

А от друга команда дуже класна. Дозволяє знайти того хто винен в тому що ви бачите в відкритому вами файлі, і від кого вимагати пояснень. Типове використання :Blame "def some_fancy_function" -A 10. Також можна передавати в параметр номер рядка, але Меркуріал при пошуку винних дивиться в останній комміт, а не поточний стан проекту.

Далі те що знаходилось в мене на початку конфіга, але ця розповідь навіть трохи менш хаотична і неструктурована ніж він, тому терпіть:

set smartindent
nmap ; :

Перше – банальне, друге – дозволяє зекономити один рух лівого мізинця. Я вже навіть звик, тепер мене не тільки чужі комп’ютери, а й чужі Vim-и нервують.

set hlsearch
set wildmenu

Перший рядок вмикає просто таки життєво необхідне в деяких випадках виділення жовтим кольором шаблону який шукається. Дозволяє підсвічувати зайві табуляції, деякі стильові помилки, і навіть задовгі рядки. Треба лише вказати регулярний вираз (про задовгі рядки далі). Другий рядок – вмикає меню варіантів автодоповнення. Просто натисніть :<Tab> і побачите.

set wildignore+=*.o,*.obj,.git,*.pyc

Корисна опція, яка дозволяє забрати бінарні файли, які ви ніколи редагувати не захочете з варіантів автодоповнення для наприклад команди :e.

Записую в регістр c рекурсивний (!) макрос, який видаляє зайві пробіли з кінця рядків:

let @c = ‘/ $^Mx@c’

PEP8 – це важливо. За однією з його вимог довжина рядка коду не повинна перевищувати 80 символів. І це не для того аби цей рядок помістився на перфокарті. По-перше, короткі рядки більш читабельні, а читабельність коду важливіша ніж писабельність. По-друге – короткі рядки простіше влазяться в три колонки на одному моніторі, що дуже допомагає при вирішенні конфліктів в версіях. Для підсвітки задовгих рядків я використовую пошук по регулярному виразу:

nmap HL /\%79v.\+/<CR>

А все тому, що мій робочий Vim трохи застарів. Починаючи з версії 7.3 можна написати:

set colorcolumn=80

 

nmap SS <ESC>:mksession! ~/session.vim<CR>
nmap SL <ESC>:source ~/session.vim<CR>

Session Save і Session Load – дві команди які дозволяють зберегти поточний стан редактора (всі відкриті буфери, позицію курсора) в файл за структурою подібний на той же vimrc.

nmap CP <ESC>:let @+ = expand("%:p")<CR>

Комбінація для копіювання повної назви файлу що редагується в поточному буфері, до системного буфера обміну. Це якщо раптом хочеться щось з ним зробити, а ті урізані можливості доступу до терміналу які дає Vim вас не влаштовують.

au BufRead,BufNewFile *.mako set filetype=mako
autocmd FileType mako set syntax=mako

Виявилось, що Vim вважає файли *.mako – файлами *.conf і синтаксис підсвічує відповідно. Довелось йому пояснити. Підсвітка синтаксису Mako ставиться окремо.

І я поки що не розглянув Пайтоно-специфічні настройки, такі як список тегів (дає гіпертекстові можливості в коді, автодоповнення, і список тегів як на ілюстрації зліва), та прив’язку “компілятора”, і парсинг його виводу, і навігація по помилках (на ілюстрації внизу. Таке ж теоретично можна приробити і для пошуку по проекту, але треба вияснити як. Тобто залишилось найцікавіше, не переключайте канал! 🙂

Advertisements

Written by bunyk

Листопад 1, 2011 at 23:54

Оприлюднено в Інструменти, Кодерство

Tagged with ,

Відповідей: 8

Subscribe to comments with RSS.

  1. «gVim, бо він дозволяє прокрутку колесиком миші, виділення мишею, перемикання вкладок і перетягування меж буферів теж мишею» — пишемо у .vimrc рядок
    set mouse=a
    і звичайний Вім підтримує все те саме.

    command! Dir :Explore %:p:h – я користуюсь te . (te у мене замаплений як nmap te :tabedit )

    щодо find – я досі роблю :sh і шукаю за допомогою find -path, втім, це специфіка проекту, в Андроїді дуже багато місць, де можуть бути хедери, і поки що цей спосіб їх знайти здався найефективнішим )

    nmap ; : — досі прусь і дуже вдячний 🙂 Хоч в інших Вімах тепер дійсно доводиться робити це руками після першого ж спотикання об ;

    set hlsearch — уже використовував, ще з часом додав собі map :set invhlsearch — по F8 вмикається/вимикається підсвітка, тому що іноді вона досить кричуща.

    nmap SS :mksession! ~/session.vim
    nmap SL :source ~/session.vim — спасибі, треба собі утягнути (я якось пробував зберігати сесії, але поки що не прижилось).

    Ще з корисного, що можу порекомендувати:
    Буфери а ля emacs:
    nmap sl :buffers:buffer
    — “перевернуте ls” 🙂 , показує список усіх відкритих буферів і пропонує вибрати потрібний

    nmap s; :set — думав, буде корисним, але так і не привчив себе поки що

    Підсвітка рядка:
    hi CursorLine cterm=NONE ctermbg=black
    set cursorline

    І ще використовую кілька збочень для згортання сішного коду та навігації за допомогою ctags, допомагає із Джавою і плюсами, яких у коді Андроїда 90%.

    Dmytro Sirenko

    Листопад 9, 2011 at 12:48

    • Ой, кляті < і &rt;

      Dmytro Sirenko

      Листопад 9, 2011 at 12:51

    • Виправлення:
      nmap <F8> :set invhlsearch<CR>
      nmap sl :buffers<CR>:buffer

      Dmytro Sirenko

      Листопад 9, 2011 at 12:53

      • Миша працює! Круто.

        Підсвітка рядка з курсором – теж приємно. Дякую.

        bunyk

        Листопад 10, 2011 at 23:02

      • До речі, ти в курсі про http://betterthangrep.com/, чи теж варто описати?

        bunyk

        Листопад 10, 2011 at 23:03

        • Не знав, треба буде спробувати: якщо це і справді вносить якісь семантичні покращення порівняно із grep, то смисл є, але свій велосипед (function gsearch () { grep “$1” -RIHn –color=auto –exclude=tags } ) ближче до тіла, ніж інші велосипеди 🙂

          dmytrish

          Листопад 15, 2011 at 15:11

    • І ще одне запізніле дякую за sl. 🙂

      Корисно буває перечитувати коментарі.

      bunyk

      Червень 18, 2012 at 11:36

  2. […] графічною версією, бо там є підтримка мишки. Добрі люди підказали що в терміналі теж є, досить лише додати […]


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: