Vim plugins: Difference between revisions
(→Ag) |
|||
Line 262: | Line 262: | ||
</source> |
</source> |
||
=== |
=== ack.vim === |
||
[https://github.com/rking/ag.vim '''Silver search''' Vim plugin for the_silver_searcher, 'ag'] |
|||
{| class=wikitable width=100% |
|||
⚫ | |||
|- |
|||
|width=72pt| |
|||
|width=72pt|[https://github.com/mileszs/ack.vim GitHub] |
|||
!width=15%|ack.vim |
|||
|Vim plugin for the Perl module / CLI script 'ack' |
|||
|- |
|||
|colspan=4| |
|||
{| |
|||
|- |
|||
| || |
|||
|} |
|||
I fell back to this plugin because [https://github.com/rking/ag.vim ag.vim] is stalled. But we can still use '''ag''' as search engine. |
|||
My settings [http://vim.wikia.com/wiki/Replace_a_builtin_command_using_cabbrev]: |
|||
<source lang=vim> |
<source lang=vim> |
||
⚫ | |||
</source> |
|||
:And combined with plugin Ctrl-P (see below): |
|||
<source lang=vim> |
|||
" CtrlP |
|||
" ----- |
|||
" Use AG for look-up. See https://robots.thoughtbot.com/faster-grepping-in-vim |
|||
if executable('ag') |
if executable('ag') |
||
" Use ag over grep - See ag man page for option '--vimgrep' |
" Use ag over grep - See ag man page for option '--vimgrep' |
||
Line 278: | Line 285: | ||
set grepformat=%f:%l:%c:%m |
set grepformat=%f:%l:%c:%m |
||
" Use ag in CtrlP for listing files. Lightning fast and respects .gitignore |
|||
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' |
|||
" ag is fast enough that CtrlP doesn't need to cache |
|||
let g:ctrlp_use_caching = 0 |
|||
" AG |
|||
" -- |
|||
" bind K to grep word under cursor |
" bind K to grep word under cursor |
||
nnoremap K :grep! "\b<C-R><C-W>\b"<CR>:cw<CR> |
nnoremap K :grep! "\b<C-R><C-W>\b"<CR>:cw<CR> |
||
let g:ackprg = 'ag --vimgrep' |
|||
⚫ | |||
⚫ | |||
endif |
endif |
||
</source> |
</source> |
Revision as of 06:15, 16 November 2016
This page is about Vim plugins.
Overview
Find a plugin
Most plugins are found on vim.org or GitHub:
- A mirror of all plugins originally found on http://www.vim.org/scripts/ ;
- GitHub.
Install a plugin
The best is to use a plugin manager (see below). Otherwise,
- Unzip the plugin in ~/.vim directory (or plugin, autoload...)
- Generate the help tags with:
helptags ~/.vim/tags
Getting help
Most plugins come with local help files. Do :help local-additions
to get a list of help files for locally installed plugins.
Plugin Managers
Here I list various plugin managers. My current favorite is vim-plug.
apt-vim
Fully-automated, Cross-platform Plugin Manager for Vim.
Pathogen
Plugin manager from Tim Pope.
VIM (vim-addon-manager)
VAM manage and install vim plugins (including their dependencies) in a sane way.
vim-plug
Plugin manager from junegunn, author of fzf, vim-easy-align.
- Interaction with $HOME version control
If we store our HOME files (dot-files) in git, we can't store the plugins anymore because they are fetched and stored locally as squashed git submodules. We can circumvent this by managing these plugins as git submodules.
First create .gitmodules:
[submodule "ack.vim"]
path = .vim/plugged/ack.vim
url = ./.vim/plugged/ack.vim
[submodule "auto-pairs"]
path = .vim/plugged/auto-pairs
url = ./.vim/plugged/auto-pairs
[submodule "a.vim"]
path = .vim/plugged/a.vim
url = ./.vim/plugged/a.vim
Then create the bare repositories:
git clone --bare /home/peetersm home.git
cd home.git/
mkdir -p .vim/plugged
cd .vim/plugged
for g in ~/.vim/plugged/*; do git clone --bare $g; done
Then, to clone the HOME repository:
git clone --recursive .../home.git
Finally we must update the tags file in vim. Start vim and run PlugInstall!
. Ignore the error messages.
- Troubleshooting
- Using short path may fail if plugin name has an extension. For instance:
" The following FAILS because of trailing .vim
Plug 'ctrlpvim/ctrlp.vim'
" Use the following instead.
Plug 'https://github.com/ctrlpvim/ctrlp.vim.git'
- Conditional plugin activation.
- See the FAQ.
Installed plugins
Plugins I'm currently using.
SnipMate
snipMate : TextMate-style snippets for Vim
- Engine in VimL: https://github.com/garbas/vim-snipmate (garbas' fork), http://github.com/msanders/snipmate.vim (original, stalled)
- Engine in Python: https://github.com/SirVer/ultisnips
- Snippets definition: https://github.com/honza/vim-snippets
- Another engine, also very powerful but different syntax (not compatible with vim-snippets): https://github.com/drmingdrmer/xptemplate
Some snippets:
#### C ####
main main() inc #include <...> Inc #include "..." Def #ifndef ... #define ... #endif def #define ifdef #ifdef ... #endif #if #if ... #endif once #ifndef HEADER_H .... # define HEADER_H ... #endif (Header Include-Guard) if If (...) { ... } el else { ... } t ... ? ... : ... (tertiary conditional) do do ... while ( ... ) wh while (...) { ... } for for (... = 0; ...; ...) { ... } forr for (... = ...; ...; ...) { ... } fun ... function(...) { ... } fund ... function(...;) td typedef st struct tds typedef struct tde typedef enum pr printf fpr fprintf . [ ... ] un unsigned
#### C++ ####
readfile snippet for reading file map std::map<... , ...> map... vector std::vector<...> v... ns namespace ... { ... } cl class { public: ... private: };
A
a.vim : Alternate Files quickly (.c --> .h etc) (forked version, the original version)
AutoTag
AutoTag : Updates entries in a tags file automatically when saving
Surround
surround.vim : Delete/change/add parentheses/quotes/XML-tags/much more with ease (github)
Repeat
Install repeat.vim : Use the repeat command (.) with supported plugins
tComment
tComment : An extensible & universal comment plugin that also handles embedded filetypes
Smart Tabs
Smart Tabs : Use tabs for indent, spaces for alignment
- See also Indent with tabs & align with spaces
Cpp.vim
cpp.vim: General C++ Settings (no indentation for namespace...)
- (disabled highlight of leading tabs, line length overruns, unit test header test + nice
AlterColour
function that computes new colour...)
CScope
CScope (also mirrored on GitHub)
- Cscope page is available on SourceForge.
- See the tutorial here
- Cscope on Vim Wiki
- One can also use cscope and ctags together
Auto-Pairs
vim.org | GitHub | auto-pairs | Vim plugin, insert or delete brackets, parens, quotes in pair | ||||
---|---|---|---|---|---|---|---|
|
Tested on NeoVim: undoable and dot-repeatable (.
) (and should be the same on vim 7.4.849+).
Works better than ClosePairs and similar.
More auto-close plugins or similar:
- Tested on NeoVim: undo broken but dot-repeatable (
.
).
- delimitMate by Israel Chauca Fuentes, https://github.com/Raimondi/delimitMate [1]
- AutoClose by Karl Guertin, https://github.com/vim-scripts/AutoClose [2]
- AutoClose by Thiago Alves, https://github.com/vim-scripts/AutoClose--Alves [3]
- Best so far — Auto Pairs by Miao Jiang, https://github.com/jiangmiao/auto-pairs
- Tested on NeoVim: undoable and dot-repeatable (
.
) (and should be the same on vim 7.4.849+).
- ClosePairs by Edoardo Vacchi, https://github.com/vim-scripts/ClosePairs [4]
- Smartinput by Kana Natsuno, https://github.com/kana/vim-smartinput
- breaks undo / dot-repeat (tested on neovim). Nice support of triple apostrophe.
- Simple pairs by Orestis Markou, https://github.com/vim-scripts/simple-pairs [5]
- Requires Python.
- vim-autoclose by Townk, https://github.com/Townk/vim-autoclose
- Tested on NeoVim: undo broken but dot-repeatable (
.
).
More on auto-close plugins:
More on the issue of dot-repeat (with list of plugins):
Vim BufStat
- MiniBufExplorer questions (closing a buffer, making it invisible, etc.) (use d in minibufexpl, :set hidden to navigate to other buf even if current modified)
- Can we remap :q to :bd only when 2 or more buffer opened?
- An alternative is buftabs: Minimalistic buffer tabs saving screen space (more at StackOverflow - An alternative to minibufexplorer (vim)?)
- StackOverflow - MiniBufExplorer and NERD_Tree closing buffers unexpected behavior: See tip165 - bclose + custom mapping below, :bd might just be good enough though...
" GRB: use fancy buffer closing that doesn't close the split
cnoremap <expr> bd (getcmdtype() == ':' ? 'Bclose' : 'bd')
LustyExplorer
vim.org | GitHub | LustyExplorer | Dynamic filesystem and buffer explore |
---|---|---|---|
More recent GitHub (merged with LustyJuggler) |
FuzzyFinder
FuzzyFinder : buffer/file/command/tag/etc explorer with fuzzy matching
- Alternative, Command-T (inspired from TextMate)
- See also Super-Finder in Vim (using FuzzyFinder)
- After
:set path=/path/to/project/**
, one can do:find filename.ext
(See [6], more details at [7]) - To find a file in a sub-directory, use the fuzzy query **/filename
Vim-LaTeX
vim-latex (documentation See page vim-latex.
SparkUp
Sparkup — A parser for a condensed HTML format Use ^e in edit mode to extend sparkup text, and ^n to go to next empty item. Some examples (more at Zen Coding:
div#page.section.main div[title] a[title="Hello world" rel] td[colspan=2] ul > li*5 li.item$$$*3 div#page>(div#header>ul#nav>li*4>a)+(div#page>(h1>span)+p*2)+div#footer #content>.section div#content>div.section p>{Click }+a{here}+{ to continue}
MatchIt
matchit.zip : extended % matching for HTML, LaTeX, and many other languages
VimWiki
vimwiki : Personal Wiki for Vim (on GitHub)
- S-CR to continue list.
To quote a text block with {{{ ... }}}
in visual mode, add to ~/.vim/ftplugin/vimwiki_custom.vim:
" Quote a block of text with {{{ }}} in visual mode
:vmap gq DO {{{<CR><ESC>P
ack.vim
GitHub | ack.vim | Vim plugin for the Perl module / CLI script 'ack' | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
I fell back to this plugin because ag.vim is stalled. But we can still use ag as search engine. My settings [8]: if executable('ag')
" Use ag over grep - See ag man page for option '--vimgrep'
set grepprg=ag\ --vimgrep\ $*
set grepformat=%f:%l:%c:%m
" bind K to grep word under cursor
nnoremap K :grep! "\b<C-R><C-W>\b"<CR>:cw<CR>
let g:ackprg = 'ag --vimgrep'
" Allow lowercase command 'ag' - see http://vim.wikia.com/wiki/Replace_a_builtin_command_using_cabbrev
cnoreabbrev ag <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'Ack' : 'ag')<CR>
endif
ctrlp.vim
Currently works best using ag (this and [9]) as file scanner and cpsm as match engine. My settings: " Set root directory
let g:ctrlp_working_path_mode = 'rwa'
" Enable filename search (instead of full path) - Ctrl-D to switch
let g:ctrlp_by_filename = 1
"
" Use AG for look-up. See https://robots.thoughtbot.com/faster-grepping-in-vim
if executable('ag')
" Use ag in CtrlP for listing files. Lightning fast and DOESN'T respect .gitignore
let g:ctrlp_user_command = 'ag %s -U -l --nocolor -g ""'
" ag is fast enough that CtrlP doesn't need to cache - BUT we are on a slow filesystem
" let g:ctrlp_use_caching = 0
endif
Conqueconque.vim: Run interactive commands inside a Vim buffer. Mcf-make-targetmcf-make-target: Persistent make target in Vim This plugin lets Vim to store the last arguments passed to make, and use that argument when make is invoked without arguments. For ease, define the following macro: :nmap <F5> :wa<CR>:Make<CR>:cw<CR> # Note the capital M to Make
To build a custom target: :Make <targetname> # first invocation. Store targetname for future use
<F5> # next
Vim-gitgutter
Fugitive
Add to .vimrc: set diffopt+=vertical " Favor vertical split for vimdiff
Some commands: " Gdiff
:Gdiff " View differences with index
:Gdiff HEAD " View differences with HEAD
:Gdiff - " View differences with HEAD
:Gdiff ^ " View differences with previous commit
:Gdiff ~3 " View differences with 3 commits ago
" Glog
:Glog " Open log of commits impacting current file
" Gedit
:Gedit " Edit back current file
Vim-easymotion
" <Leader>f{char} to move to {char}
map <Leader>f <Plug>(easymotion-bd-f)
nmap <Leader>f <Plug>(easymotion-overwin-f)
" s{char}{char} to move to {char}{char}
nmap s <Plug>(easymotion-overwin-f2)
" Move to line
map <Leader>L <Plug>(easymotion-bd-jk)
nmap <Leader>L <Plug>(easymotion-overwin-line)
" Move to word
map <Leader>w <Plug>(easymotion-bd-w)
nmap <Leader>w <Plug>(easymotion-overwin-w)
Vim-incsearch
See website for more features (including fuzzy search, etc.).
" You can use other keymappings like <C-l> instead of <CR> if you want to
" use these mappings as default search and somtimes want to move cursor with
" EasyMotion.
function! s:incsearch_config(...) abort
return incsearch#util#deepextend(deepcopy({
\ 'modules': [incsearch#config#easymotion#module({'overwin': 1})],
\ 'keymap': {
\ "\<CR>": '<Over>(easymotion)'
\ },
\ 'is_expr': 0
\ }), get(a:, 1, {}))
endfunction
noremap <silent><expr> / incsearch#go(<SID>incsearch_config())
noremap <silent><expr> ? incsearch#go(<SID>incsearch_config({'command': '?'}))
noremap <silent><expr> g/ incsearch#go(<SID>incsearch_config({'is_stay': 1}))
Vim-easy-align
Supertab
cpsm
Plugins to tryPlugins I need to try or install some day.
Some videos that illustrates those plugins:
Interesting plugin, but does not handle well nested Uninstalled pluginsPlugins I'm no longer using. EasyTagseasytags.vim : Automated tag file generation and syntax highlighting of tags in Vim
AutoClose
Don't like it much because inserting the closing pair will jump out of nested pair, which is annoying when one try to simply insert a closing brace (but a solution is to use the Surround plugin to surround some selected text with braces). ClosePairs
simpler than AutoClose, and can also delete pair of braces at once with <BS>. However breaks undo and not dot-repeatable. Below is a patch to push down the closing brace when typing { twice (inspired from AutoClose plugin). ~/.vim/plugin/closepairs.vim.diff (<file name="closepairs.vim.diff" tag="source">download</file>)
--- a/.vim/plugin/closepairs.vim
+++ b/.vim/plugin/closepairs.vim
@@ -10,7 +10,7 @@
inoremap ( ()<left>
-inoremap { {}<left>
+inoremap <expr> { <SID>openpair('{','}')
inoremap [ []<left>
vnoremap <leader>" "zdi"<c-r>z"
@@ -44,6 +44,16 @@ function! s:delpair()
return "\<bs>"
endf
+function! s:openpair(left,right)
+ let l:col = col('.')
+ let l:lchr = getline('.')[l:col-2]
+ let l:rchr = getline('.')[l:col-1]
+ if a:left == l:lchr && a:right == l:rchr
+ return "\<esc>a\<CR>;\<CR>".a:right."\<esc>\"_xk$\"_xa"
+ endif
+ return a:left.a:right."\<left>"
+endf
+
function! s:escapepair(right)
Trinity.vimtrinity.vim : Build the trinity of srcexpl, taglist, NERD_tree to be a good IDE
~/.vim/plugin/trinity.vim.diff (<file name="trinity.vim.diff" tag="source">download</file>)
--- trinity.vim 2009-12-22 19:50:06.000000000 +0100
+++ trinity-new.vim 2010-07-06 01:24:28.000000000 +0200
@@ -90,7 +90,7 @@
" Set the window width
let g:Tlist_WinWidth = 24
" Sort by the order
- let g:Tlist_Sort_Type = "order"
+ let g:Tlist_Sort_Type = "name"
" Do not display the help info
let g:Tlist_Compact_Format = 1
" If you are the last, kill yourself
@@ -100,7 +100,7 @@
" Do not show folding tree
let g:Tlist_Enable_Fold_Column = 0
" Always display one file tags
- let g:Tlist_Show_One_File = 1
+ let g:Tlist_Show_One_File = 0
endfunction " }}}
~/.vim/plugin/taglist.vim.diff (<file name="taglist.vim.diff" tag="source">download</file>)
--- taglist.vim 2007-09-21 18:11:20.000000000 +0200
+++ taglist-new.vim 2010-07-06 01:08:11.000000000 +0200
@@ -3207,14 +3207,7 @@
if a:win_ctrl == 'newwin'
split
endif
+ " 20100706 - MIP PATCH BEGIN - USE badd / buffer! so that we can
+ " switch files even when current buffer changes are not written ----
+ if !bufexists(a:filename)
+ exe "badd " . escape(a:filename, ' ')
+ endif
+ exe "buffer! " . escape(a:filename, ' ')
+ " exe "edit " . escape(a:filename, ' ')
+ " 20100706 - MIP PATCH END -----
- exe "edit " . escape(a:filename, ' ')
else
" Open a new window
if g:Tlist_Use_Horiz_Window
~/.vim/plugin/taglist.vim.diff (<file name="taglist.vim.diff" tag="source">download</file>)
--- taglist.vim 2011-06-27 00:32:33.000000000 +0200
+++ taglist-new.vim 2011-06-27 00:37:23.000000000 +0200
@@ -1552,6 +1552,8 @@
\ :call <SID>Tlist_Window_Jump_To_Tag('useopen')<CR>
nnoremap <buffer> <silent> o
\ :call <SID>Tlist_Window_Jump_To_Tag('newwin')<CR>
+ nnoremap <buffer> <silent> O
+ \ :call <SID>Tlist_Window_Jump_To_Tag('newwinv')<CR>
nnoremap <buffer> <silent> p
\ :call <SID>Tlist_Window_Jump_To_Tag('preview')<CR>
nnoremap <buffer> <silent> P
@@ -1592,6 +1594,8 @@
\ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('useopen')<CR>
inoremap <buffer> <silent> o
\ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('newwin')<CR>
+ inoremap <buffer> <silent> O
+ \ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('newwinv')<CR>
inoremap <buffer> <silent> p
\ <C-o>:call <SID>Tlist_Window_Jump_To_Tag('preview')<CR>
inoremap <buffer> <silent> P
@@ -3206,6 +3210,10 @@
" the existing window into two.
if a:win_ctrl == 'newwin'
split
+ " 20110627 - MIP PATCH BEGIN - Allow vertical split -----
+ elseif a:win_ctrl == 'newwinv'
+ vsplit
+ " 20110627 - MIP PATCH END -----
endif
" 20100706 - MIP PATCH BEGIN - USE badd / buffer! so that we can
" switch files even when current buffer changes are not written ----
@@ -3265,6 +3273,10 @@
" existing window into two.
if a:win_ctrl == 'newwin'
split
+ " 20110627 - MIP PATCH BEGIN - Allow vertical split -----
+ elseif a:win_ctrl == 'newwinv'
+ vsplit
+ " 20110627 - MIP PATCH END -----
endif
endif
endif
@@ -3313,6 +3325,7 @@
" Jump to the location of the current tag
" win_ctrl == useopen - Reuse the existing file window
" win_ctrl == newwin - Open a new window
+" win_ctrl == newwinv - Open a new window (vertical)
" win_ctrl == preview - Preview the tag
" win_ctrl == prevwin - Open in previous window
" win_ctrl == newtab - Open in new tab
MiniBufExplminibufexpl.vim : Elegant buffer explorer - takes very little screen space
trinity plugin.
LustyJuggler
Removed because I don't use it. LustyExplorer, NERDTree and FuzzyFinder are much better alternatives. LaTeX Text FormatterLatex Text Formatter : This scripts makes it easier to format latex text
Calendarcalendar.vim - A calendar application for Vim
My settings in .vimrc: " ----- Vim-Calendar ---------------------------------------------------------
let g:calendar_week_number=1
let g:calendar_first_day='monday'
DiffChangesdiffchanges.vim : Show changes made to current buffer since the last save
MRUmru.vim : Plugin to manage Most Recently Used (MRU) files
~/.vim/plugin/mru.vim.diff (<file name="mru.vim.diff" tag="source">download</file>)
--- mru-old.vim 2010-06-29 00:45:59.000000000 +0200
+++ mru.vim 2010-07-22 14:14:19.000000000 +0200
@@ -657,7 +657,12 @@
let wcmd = '+buffer' . bufnum
endif
- exe 'silent! botright ' . g:MRU_Window_Height . 'split ' . wcmd
+ " MIP PATCH BEGIN - :botright conflicts with TagList + QuickFix windows
+ " if I have TagList + QuickFix window opened, calling :MRU multiple times makes the QuickFix window to grow
+ " endlessly
+ " exe 'silent! botright ' . g:MRU_Window_Height . 'split ' . wcmd
+ exe 'silent! ' . g:MRU_Window_Height . 'split ' . wcmd
+ " MIP PATCH END
endif
endif
Git-filegit:file.vim : open any version of a file in git For instance, to open file filename.c at commit HEAD~4: vim HEAD~4:./filename.c
Align
Let's give vim-easy-align a try instead. Hexman
Uninstalled because it contains the sign of the devil... Well, no, in fact because I don't use it much and standard mappings interfere with vim-gitgutter. |