LINUX.ORG.RU

Незаменимые plug-in'ы Vim

 


21

12

Наверное, «незаменимые» слишком резко, но все же, какие, по вашему мнению, действительно полезные (не тривиальные, типа NERDtree, Syntastic или комплитеры) plug-in'ы для Vim вы используете?

Полагаю, эта тема будет интересна для начинающих и остальных пользователей Vim.

Из того, что использую я:

«The missing motion for Vim» полезен тем, что позволяет искать и перейти к искомому, в отличие от изкоробочного f F одного символа - по 2 или 3, также после активации опции может работать как аналог довольно неюзабельного easymotion, но главное преимущество все-таки в изначальном применении.

«simple REPL inside vim» - дико тащусь от этого малоизвестного плагина, проще посмотреть иллюстрацию по ссылке. (вкратце: получить по одному нажатию результат интерпретатора выделенного куска, :read !* отдыхает).

«Yet another rainbow parentheses plugin» - имхо лучшие цветные скобочки из существующих.

аналог имаксовского Narrow Region, когда хочешь сконцентрироваться на небольшом куске кода/текста, выделяешь, он открывается в отдельном буфере, при сохранении синхронизация с остальным.

открывает файловый менеджер или терминал в директории с редактируемым файлом.

предпросмотр :substitute в реальном времени

...

Кроме этого, может кто не знал: о самом удобном манипулировании с окнами, взаимодействии с tmux (например под любой интерпретатор/компилятор), стартовом экране, календаре-планировщике, отображении отступов, а также нескучной цветовой схеме для терминала, получше, чем блевотный solarized.

Что посоветуете?



Последнее исправление: clojure (всего исправлений: 3)
Ответ на: комментарий от Lavos

Уже есть. Даже аппаратная. Ищи с надписью reset на системнике.

anonymous
()

startify - няшный стартовый экран со списком последних файлов и закладками.
gundo - древо изменений в графическом виде с указанием различий. Очень удобная штука. Рекомендую использовать настройки

" показывать diff внизу окна
let g:gundo_preview_bottom = 1
" отключения конфликта с дополнением NERD Commenter
let NERDShutUp=1
repeat - Позволяет применять предыдущую операцию к текущему местоположению курсорами по нажатию "."

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

а, еще прикол, курсор «прицел»:

"---| Showing cross cursor:

hi CursorColumn term=NONE cterm=NONE ctermbg=240
hi CursorLine term=NONE cterm=NONE ctermbg=240
imap <F8><F9> <ESC>:set cuc! cul!<CR><INSERT><RIGHT>
nmap <F8><F9> <ESC>:set cuc! cul!<CR>

clojure
() автор топика

Спасибо, кое чего установил.

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

полагаю все используют, включая другие плугины Tim Pope, просто не считал нужным их упоминать, кто не понял о чем речь, стоит ознакомиться с плагинами здесь: https://github.com/tpope?tab=repositories

clojure
() автор топика

и наверное стоит упомянуть TextObjectify, без которого вообще сложно представить работу в Vim'е, а именно он добавляет поддержку моушинов и селектов типа ci , di , yi и т.д. кроме дефолтных примитивных кавычек и скобочек - любые другие делиметры, например:

станет доступным ci$ если курсор где-то в слове SPARTA:

this is $SPARTA$!
станет доступным di#
this is #SPARTA#!
станет доступным yi^
this is ^SPARTA^!
и так далее.

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

Откуда ты хочешь выйти в vim, наркоман?

Из ex, вистимо.

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

TextObjectify, без которого вообще сложно представить работу в Vim'е

Ненужно. Ни разу не потребовалось работать с разделителями вроде $#@^

anonymous
()

Почему-то многие плагины предлагают ставить херню вроде vundle или pathogen. Повбывав бы!

anonymous
()

«simple REPL inside vim» - дико тащусь от этого малоизвестного плагина, проще посмотреть иллюстрацию по ссылке. (вкратце: получить по одному нажатию результат интерпретатора выделенного куска, :read !* отдыхает).

Посмотрел по ссылке, ничего не понял. Кто мешает забиндить :read на одну кнопку?

anonymous
()

Как перебиндить sneak на другую клавишу? s мне нужна. README ссылается на sneak.txt, tl;dr.

anonymous
()

pipe2eval для Ruby и Python работает, для Go - нет.

anonymous
()

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

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

Откуда ты хочешь выйти в vim, наркоман?

Возможно, из бренного тела.

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

Ненужно.

Ни разу не потребовалось работать с разделителями вроде $#@^

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

Посмотрел по ссылке, ничего не понял. Кто мешает забиндить :read на одну кнопку?

попробуй понять разницу по стоимости между вводом/пастой строки, параграфа или куска кода в командный режим + выбором нужного интерпретатора и т.д. — и одним нажатием хоткея pipe2eval.

clojure
() автор топика

Вот кстати довольно полезный плагин для интеграции с tmux: tmux-complete.vim

добавляет в автокомплит то, что находится в панелях или окнах tmux'а, удобно работать с выхлопами, например: http://i.imgur.com/IFFRMB9.png

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

попробуй понять разницу

Да нет, это ты не понимаешь, что разницы, по большому счету и нет. Ладно бы он процесс держал, чтоб контекст оставался, дык хренушки.

anonymous
()

перечислю свои:

a.vim - для быстрого переключения между хидером/реализацией (в языках, в которых это имеет место быть)

comments.vim - по ctrl+c закомментировать строчку/выделенный блок. киллер фича. ctrl+x uncomment. поддерживается куча языков/конфигов. да, переопределяет декремент. насрать.

matchit.vim - расширение функционала %

repeat.vim - расширение функционала .

surround.vim - добавить/изменить/удалить кавычки/скобки/теги

tagbar.vim - показывает в отдельном буфере структуру исходника

visincrPlugin.vim - пронумеровать выделенный блок. например, индексы массива

Powerline.vim - удобная строка состояния

bufexplorer.vim - навигация по открытым буферам

да, забыл. недавно добавил starsearch.vim. ибо РЕАЛЬНО заебывают эти прыжки при поиске звездочкой. раньше юзал ремап (*N), чтобы остаться на той же строке, но от прыжков это не спасало

vvviperrr ★★★★★
()
Последнее исправление: vvviperrr (всего исправлений: 6)
Ответ на: комментарий от clojure

и наверное стоит упомянуть TextObjectify

Совсем забыл рассказать о большой плюшке этого действительно незаменимого плагина, он позволяет не только работать с любыми делиметрами (любые два символа, включая буквы), но и получать доступ к ближайшим из них, например:

позиция курсора │  .....................
                │  Путин, всё ещё улыбаясь, ответил: "Она утонула".
нужно изменить  │                                     └─────────┘
можно сделать ci" находясь на позиции курсора, что невозможно без плагина.

Что-то подобное предоставляет targets.vim, но там как-то не экономично.

clojure
() автор топика

Кстати, как с 0 практически выучить Vim?

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

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

как с 0 практически выучить Vim?

Если не знаешь, зачем тебе это надо, то тебе это не надо.

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

Кстати, как с 0 практически выучить Vim?

Лучше прочитать: Practical Vim¹

Или просмотреть: Venture Into Vim², Vim for Advanced Users³

После этого, по ходу использования редактора и становления мышечной памяти - ты Б-г Vim'а.

---

[1], [2], [3]

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

surround это умеет.

каким образом, приведи пример.

clojure
() автор топика

Продублирую сюда для подписавшихся одну крайне полезную вещь, полезную для тех, кто работает с не только английской раскладкой.

Плагин vim-xkbswitch, при установленном xkb-switch - возвращает на английскую раскладку при выходе из режима редактирования, т.е. не нужно переключать раскладку для нормального режима.

Из коробки только 'ru', но легко добавить любую другую раскладку, лично мои настройки таковы:

let g:XkbSwitchEnabled = 1
let g:XkbSwitchLib = '/usr/lib64/libxkbswitch.so'
let g:XkbSwitchIMappings = ['ru']
Удобно. Gentoo ebuild для xkb-switch например здесь.

clojure
() автор топика

Нытьё

pipe2eval

Не может в умолчания для filetype'ов (как ему объяснить, что python — это python3? Никак).

Захардкожен «# comment» стиль комментариев.

TextObjectify

По-умолчанию нелогичен: ciz — изменить текст между соседними «z», cis — «change inside sentence» (как и было), cit — изменить текст между соседними «t», но было «change inside tag».

anonymous
()

Кто знает, есть ли плагин который ищет все вхождения заданной строки во всех файлах в заданной директории и ниже (рекурсивно). Нужно возможность задать маску (типа, **/*.cpp) и чтобы плагин понимал эти строки, как имена в C/C++ (т.е. если я ищу функцию X::foo(), то не надо мне в результатах выдавать Y::foo()). Это потребует, конечно, построение некоторого AST, т.е. прокатить только в комплекте со шлангом (тот же YCM успешно строит дерево и использует его для автодополнения и т.п.).

И да, я понимаю, что можно взять, и руками написать (возможно, зареиспользовав YCM), но мне лень (некогда).

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

Пробовал Ag + ag.vim ? Я не гарантирую (не использую), но сейчас это самое передовое.

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

vimgrep не в состоянии отличить X::foo() от Y::foo() (как один из примеров), т.е. он делает текстовый поиск, ему по барабану C/C++ и его синтаксис и семантика.

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

Ладно бы он процесс держал, чтоб контекст оставался, дык хренушки.

контекст остается, если использовать не vimux, а tslime2.vim

можно отправить целый буфер:

function! SendToTmuxStripped(text)
    call SendToTmux(substitute(a:text, '\v\n*$', '', ''))
endfunction

nnoremap <buffer> <silent> <localleader>] :let lisp_tslime_view = winsaveview()<cr>ggVG"ry:call SendToTmuxStripped(@r)<cr>:call winrestview(lisp_tslime_view)<cr>

а также только выделенный кусок:

vnoremap <buffer> <silent> <localleader>[ :SendSelectionToTmux<cr>

clojure
() автор топика
nnoremap "" viw<esc>a"<esc>hbi"<esc>lel
nnoremap '' viw<esc>a'<esc>hbi'<esc>lel

нажатие на слове "" или '' в normal mode - обрамляет его в двойные или одинарные кавычки соответственно, без всякого плагина)

clojure
() автор топика

Не знаю пагни, если вы мне скажете, что плагин vim-fifo не полезен, то уж не знаю о чем можно говорить и как дальше жить: можно запускать на исполнение буфера в отдельном терминале, например скрипты для тестов и прочее, автоматически по хоткею из вима - не переключаясь / переводя фокус на тот терминал.

Я например ранее использовал для этого тмукс, что влечет за собой всем известные проблемы.

clojure
() автор топика
Ответ на: комментарий от Lavos

Лил, а чем тебя :q не устраивает? Слишком сложно? Забиндь.

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

Попробовал, не работает. Может, я что-то не то делаю? Вбил эти 4 команды, пробую нажимать F8 F9 в нормальном режиме и в режиме вставки - никакого крестового курсора.

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