LINUX.ORG.RU

Делимся полезными кусками из ~/.vimrc и показываем свои статусные строки 2015 тред

 , ,


38

13

Как говорили древние отцы-основатели редактирования текстов: « Damnosa quid non imminuit dies¹ ? »

Но мы им отвечаем: « Tempora mutantur et nos mutamur in illis² ! »

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

Я могу предложить (кое-что известное, но будет полезно новичкам, если такие есть):

  • Автопаста — не нужно нажимать :set paste перед пастой, чтобы сохранялись отступы, работает автоматически, добавить и забыть навсегда.
  • Кайфовставка — позволяет по хоткею кушающему моушины «замещать», т.е. заменять целевое слово (или моушин-цель) на то, что сейчас в буфере, с трудом вспоминаю, что я делал без этого хоткея.
  • Более лучший фолдинг — информация про к-во сложенных линий теперь справа + добавляет % от всего документа, картинка с этим и без.
  • Пипетка для верстальщиков — по хоткею вызывается пипетка (в зависимости от ОС — разная, на линуксе это zenity или Yad) с текущим значением на курсоре и авт. меняет при изменении.
  • Автопереключение раскладки — при переходе в normal mode и обратно, после настройки включает английский язык когда переходим в normal mode из insert mode, где был включен другой язык. Очень удобно, уже давно привык.
  • Удобно двигать строки/блоки — придумал чем занять бесполезные стрелки, используется vim-move, кстати предлагаю особо наглым упороться hardmode.
  • tmux-complete — комплитит в виме (добавляет в omnicomplete, т.е. безразлично какой комплитер используете neocomplete/YCM/etc) содержимое окон/панелей/сессий тмукса, в которых необязательно вим, может быть другое приложение либо просто выхлоп.
  • Переход на средину строки — текущей реальной (не виртуальной).
  • Режимо-зависимые курсоры — для тех, кто использует GUI-версию вима, я лично не использую.

А теперь по статусной строке. Почти два года сидел на airline, но вот недавно перешел на lightline, которая быстрее стартует и легче кастомизируется, а также не содержит кучу неиспользуемых (лично мной) возможностей. Попробовал еще ezbar, но японец пилит его под себя, хотя там есть кое-что интересное, насчет скорости:

lightline: 229.019  000.003: 
ezbar:     250.312  000.002: 
airline:   276.823  000.003: 
(если что, у меня еще около ~80 плагинов подгружаются), powerline не имеет смысла сюда рядом ставить, там секунды вместо миллисекунд :)

Вот такая у меня статусная строка: картинка, настройка здесь и здесь. Середина прозрачная, выведен размер файла, имя файла справа, голубой квадратик с + это модифицированный, но не сохраненный файл.

Показывайте ваши ништяки.

--------

¹ - лат. что не изменит губительное время
² - лат. времена меняются и мы меняемся с ними

У меня два попсовых плагина, костыль для коммента/анкоммента и своими руками (без плагинов) запиленный статуслайн. Постить пока не буду, ибо спать собираюсь уже, но скоро будет в dotfiles на gitlab. По большому счёту смотреть у меня не на что, а вот у тебя пару идей (именно идей, не реализаций) утащу.

r3lgar ★★★★★ ()
Ответ на: комментарий от intelfx

Не о чем спорить, потому что если спросить пользователя как он смог бы сделать с таким легким конфигом что-то, что прописано у меня — он бы не ответил, либо же начал нелепо отмазываться.

Лишнего в моих

wc ~/.vimrc
  896  2922 26546 /home/sev/.vimrc
практически нет, тем более я использую vim для работы, а не для просто редактирования текстов.

Но вот 10K-строчные конфиги и я не понимаю.

redhat ()
Ответ на: комментарий от redhat

Кто сказал, что я с чем-то спорю? Безусловно, там, где ты применишь волшебный десятипальцевый аккорд (привет, емакс!), я сделаю то же самое за несколько механически повторяющихся действий.

я использую vim для работы, а не для просто редактирования текстов

Это какая-то очередная разновидность илитаризма? Работа в vim, собственно, и заключается в редактировании текстов...

Ах да:

$ egrep -v '^[[:space:]]*(".*)?$' .vimrc | wc
     10      23     175
Вот так :]

intelfx ★★★★★ ()
Ответ на: комментарий от intelfx

волшебный десятипальцевый аккорд

так ведь в том-то и дело, что не привет имаксу, а одно нажатие, взять к примеру ту же кайфовставку. Простой пример, вот например у тебя сейчас в буфере за-yank-нуто какое-то значение, например «emacs's 30-finger asshats» и вот такой кусок, куда вместо «old variable» нужно его (значение) вставить:

thug.life = "old variable"
твои действия? должно получится:
thug.life = "emacs's 30-finger asshats"

Вот так :]

ну дык:

egrep -v '^[[:space:]]*(".*)?$' .vimrc | wc
   421    1554   15576

redhat ()
Ответ на: комментарий от intelfx

разновидность илитаризма? Работа в vim, собственно, и заключается в редактировании текстов...

нет же, никакого илитаризма, я специально подчеркнул, что используется для работы, а не для просто редактирования, т.е. у меня есть автоформатеры (бьютифаеры), по плагину на каждый filetype (например для haml, sass, jade, stylus и так далее), всякие чекеры-линтеры для syntastic и прочая подробная настройка, которую никак упустить нельзя.

redhat ()

Насчёт «автопасты». У меня есть аналогичная функция, но только с враппером для tmux. Может подскажете, это устаревший вариант или наоборот более актуальный?

Из плагинов стоит только AutoClose.

P.S. vim использую как текстовый редактор, а не как ide.

lampslave ★★ ()

А каким терминалом для вима пользуешься, а то я вижу конфиги как для urxvt, так и для termite.

Если термитом, то странно получается скорость powerline тебя не устраивает, а скорость термита вполне.

Dantix ★★ ()
Последнее исправление: Dantix (всего исправлений: 1)

Кстати, а не видел ли достопочтенный, что нибудь типа nerdtree, токо попроще и, желательно, на питоне?

Ну, и раз уж такая пьянка, то вот моя прелесть. Хотя там всё стандартненько вообщем то.

pon4ik ★★★★★ ()
Ответ на: комментарий от Dantix

но только с враппером для tmux.

а для чего он нужен? У меня в тмуксе никогда проблем не было с настройкой без врапера. Быть может, она у тебя осталась с тех времен, когда были баги в тмуксе/виме но уже сейчас они пофикшены?

redhat ()
Ответ на: комментарий от Dantix

Пользуюсь 99% термитом, о каких ты тормозах говоришь мне неведомо, по скорости выхлопа, как известно, libvte-like соревноваться с urxvt не могут.

Но нужна ли эта скорость выхлопа — как для редактора, так и самого выхлопа-то?

Никогда не сталкивался с какими либо проблемами в этом плане.

а скорость термита

а чем она может не устраивать? Как можно отловить тормоз при работе?

redhat ()
Ответ на: комментарий от redhat

Промахнулись с ответом. Не знаю для чего, поэтому и спрашиваю :) Я просто tmux не использую сейчас и не в курсе, как там и что.

lampslave ★★ ()
Ответ на: комментарий от redhat

Не, встроенный, и тот, что по ссылке, не удовлетворяют моим извращённым нуждам (ну по крайней мере не полностью).

Встроенный, потому что его сорцы надо искать, и они полюбому страшны как ночь^w сорцы вима. А мне хочется притырить некий плагин, который рисует в виме некое тыкабельное дерево(не обязательно ФС) и написан по возможности большей частью на питоне или чём нибудь ещё что без боли позволяет впиливать туда сишечку/кресты(лучше кресты).

pon4ik ★★★★★ ()
Ответ на: комментарий от redhat

Как можно отловить тормоз при работе?

Вствка, но я понял, что делал это нерпавильно, set paste решает эту проблему на корню

Dantix ★★ ()

Автопереключение раскладки — при переходе в normal mode и обратно, после настройки включает английский язык когда переходим в normal mode из insert mode, где был включен другой язык. Очень удобно, уже давно привык.

А он в replace-mode умеет?

salsa ()

Лично у меня ничего интересного нет, но вот это меня в своё время порадовало ::)

Dron ★★★★★ ()

Все интересные куски в плагинах, а свистопердящие статусные строки не нужны, хватает стокового рулера.

bj ()
Ответ на: комментарий от anonymous

+1 Но вим-хипстоте этого не понять, они меряются количеством установленных плагинов и шрифтом в статусе.

bj ()
Ответ на: комментарий от anonymous

vi"p

S чуть-чуть дешевле (и удобнее?):

Si"
А также удобнее, когда заменяем слово:
Sw
а по олдскулу нам пришлось бы:
vep
Лично для меня S это более удобный cw , при котором заменяемое слово не попадает в буфер перед вставкой того, на которое заменяем.

redhat ()
Ответ на: комментарий от Dantix

Во время :set paste отключаются комплитеры, автоскобки и прочее (специально ли? не в курсе), а вышеуказанная настройка автопасты просто работает, не нужно ничего ни включать ни выключать.

Кстати я вот как-то не в курсе, зачем вообще нужен «не set paste» режим, в каких случаях это чему-то не мешает. Может исторический атавизм какой?

redhat ()
Ответ на: комментарий от salsa

А он в replace-mode умеет?

Имеется в виду C-o в insert mode? Да, если в insert mode включена не английская раскладка и осуществляется вход в C-o , то раскладка автоматически переключается на английскую и возвращается на ту, что была при выходе (исполнении введенной команды).

redhat ()
Ответ на: комментарий от redhat

Замена из буфера не настолько частый юзкейз чтобы занимать однобуквенную команду и ставить доп-плагин.

bj ()
Ответ на: комментарий от redhat

У меня гораздо чаще обратная операция. Выделение переменной. Когда вырезанный текст как раз нужен в регистре и волшебный ^a в режиме вставки.

bj ()
Ответ на: комментарий от salsa

Да он тоже, собака, весь на vimL :)

Ну видимо таки придёться осваивать...

pon4ik ★★★★★ ()
Ответ на: комментарий от redhat

Имелось в виду: раскладка будет переключаться после r или R? Частенько этим пользуюсь для правки окончаний.

salsa ()

А у меня одного автопереключатель раскладки переключает с некоторой задержкой (около секунды)?

devsdc ★★ ()
Ответ на: комментарий от salsa

Немного непонятно.

Если ты в normal mode (а только там работает r и R ), то зачем тебе переключение раскладок, ведь будучи на не английской раскладке ты никак r и R не вызовешь (исключая тот случай, если использовать костыли типа set langmap= и map ф a ).

Т.е. ты ведь уже вызвал r и R , значит у тебя английская раскладка, чего еще надо-то?

redhat ()
Ответ на: комментарий от devsdc

у меня то же самое, не в курсе, переключает моментально, а если без вима, сам xkb-switch -n тоже с задержкой переключает? (я по лампочке на клавиатуре лично ориентируюсь).

redhat ()
Ответ на: комментарий от redhat

Лампочки нет, проверял просто набором текста, задержек нет. Может, я плагин вима готовить не умею?

NeoBundle 'lyokha/vim-xkbswitch.git'
let g:XkbSwitchEnabled = 1
let g:XkbSwitchLib = '/usr/lib/libxkbswitch.so'
devsdc ★★ ()
Ответ на: комментарий от devsdc

у меня так:

Plug 'lyokha/vim-xkbswitch'
let g:XkbSwitchEnabled       = 1
let g:XkbSwitchLib           = '/usr/lib64/libxkbswitch.so'
let g:XkbSwitchIMappings     = ['ru']
let g:XkbSwitchSkipIMappings = {'*' : ['[', ']', '{', '}', "'", '<', '>', ',', '.', '"']}
рекомендую добавить XkbSwitchSkipIMappings, чтобы не тратить время на гуглеж почему не работают некоторые буквы кириллицы.

Может проблема в том, что у тебя отсутствует XkbSwitchIMappings? Может вим старый? Не подскажу, использую плагин и сам xkb-switch на 3 машинах, везде моментально переключает.

redhat ()
Ответ на: комментарий от redhat

Надо подредактировать русский текст при помощи r или replace-mode. Если я правильно понял, этот плагин автоматически переключает раскладку при входе в insert-mode. Хотелось бы такое же поведение и для replace-mode.

salsa ()
Ответ на: комментарий от redhat

Добавление XkbSwitchIMappings не помогло.

$ vim --version | head -n3
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan  3 2015 06:12:54)
Included patches: 1-273
Modified by Gentoo-7.4.273

Подозреваю, вим таки староват, попробую исправить проблему обновлением.

devsdc ★★ ()
Ответ на: комментарий от salsa

Только что проверил, да, плагин работает так, как ты хочешь.

Если до выхода в normal mode в insert mode был не английский язык, то плагин возвращает этот язык в replace mode.

Но только: R , не r .

redhat ()
Ответ на: комментарий от redhat

Спасибо за ответ. Пожалуй дам плагину шанс. А для r какой-нибудь хак напишу.

salsa ()

В виме из коробки есть т.н. :ilist , его хоткеи это [I и ]I , команда работает с аргументами, а хоткеи работают по слову, на котором сейчас курсор.

Это предназначено для отображения всех строк, где используется это слово (на котором находится курсор или ввендено в качестве аргумента), [I для отображения совпадений во всем файле и ]I для поиска от текущей строки.

Но результат выхлопа неюзабельный, в том плане, что нужно потом вручную переходить к каждой строке, вводя её номер, например.

Этот кусок добавляет навигацию и автоматический переход на место совпадения при нажатии по нужной строке, кроме того работает на несколько файлов сразу:

function! List(command, selection, start_at_cursor, ...)
    let excmd   = a:command . "list"
    let normcmd = toupper(a:command)

    if a:selection
        if len(a:1) > 0
            let search_pattern = a:1
        else
            let old_reg = @v
            normal! gv"vy
            let search_pattern = substitute(escape(@v, '\/.*$^~[]'), '\\n', '\\n', 'g')
            let @v = old_reg
        endif
        redir => output
        silent! execute (a:start_at_cursor ? '+,$' : '') . excmd . ' /' . search_pattern
        redir END
    else
        redir => output
        silent! execute 'normal! ' . (a:start_at_cursor ? ']' : '[') . normcmd
        redir END
    endif

    let lines = split(output, '\n')

    if lines[0] =~ '^Error detected'
        echomsg 'Could not find "' . (a:selection ? search_pattern : expand("<cword>")) . '".'
        return
    endif

    let filename   = ""
    let qf_entries = []
    for line in lines
        if line =~ '^\S'
            let filename = line
        else
            call add(qf_entries, {"filename" : filename, "lnum" : split(line)[1], "text" : join(split(line)[2:-1])})
        endif
    endfor

    call setqflist(qf_entries)

    cwindow
endfunction

command! -nargs=1 Ilist call List("i", 1, 0, <f-args>)
nmap <silent> <F4> :call List("i", 0, 0)<CR>

Теперь по F4 (или :Ilist) открывается QuickFix внизу с навигацией по найдему: http://i.imgur.com/WdzeWcx.png

redhat ()

по-моему давно бы уже пора создать на лоре какую-то глобальную тему vim tips & tricks, куда все самописные функции и твики выкладывать(не плагины, а именно функциии и твики).

bryak ★★★★ ()
Ответ на: комментарий от bryak

2016

vim-о прыщи не осилили менеджер пакетов

anonymous ()

В плагин сил не было оформить

let g:RefreshRunningBrowser = 'chrome'
let g:RefreshRunningBrowserTime = 3

function! RefreshRunningBrowser()
  if (g:RefreshRunningBrowser == 'chrome')
    let pid_cur=system('xdotool getwindowfocus')
    let pid_browse="xdotool search --onlyvisible --class " . g:RefreshRunningBrowser . "|head -1"
    silent call system("xdotool windowactivate " . system(pid_browse) . ' ' . 'xdotool key ctrl+r')

    " revert window
    if exists("g:RefreshRunningBrowserTime")
        silent call system('sleep ' . g:RefreshRunningBrowserTime . ';xdotool windowactivate ' . pid_cur)
    endif
    redraw!
  endif

endfunction
:command! RRB :call RefreshRunningBrowser()

bryak ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.