Skip to content

frasercrmck/formative.vim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

formative.vim

Expands the functionality of the default & suggested clang-format vim integration.

The main advantage over the 'stock' vim integration is the use of text objects.

Example:

<C-K>2j   - ClangFormat 2 lines downwards
<C-K>iB   - ClangFormat inside the surrounding { } scope
<C-K>ap   - ClangFormat around the current paragraph
<C-K>/foo - ClangFormat from the current line until the first match of 'foo'

Key Bindings

<C-K> is the default 'leader' key in this plugin. Follow this key with whichever motion or text object you like, as in the examples above. It can be customised: see below.

ClangFormat can also be made to work with vim's built-in formatexpr, allowing gq to work as normal.

setlocal formatexpr=formative#ClangFormat('formatexpr')

Special Bindings

A 'quick' ClangFormat binding is provided via <Plug>FormativeLine. This works on the current line alone. Its default mapping is <C-K>k, which is designed to emulate vim's c -> cc, d -> dd line-wise operations.

There's also a binding for invoking clang-format on the entirety of the current file, and is great for doing a lot of formatting in one go. Its default mapping is <C-K>u, and is modified by setting <Plug>FormativeFile to your own preferred key combination.

In summary, here are the additional, special, reconfigurable bindings:

<C-K>k - ClangFormat the current line
<C-K>u - ClangFormat the entire file

Demonstration

For the visual learners amongst you, here's an oh-so-web-2.0 GIF:

Installation

Vim Native

Issue the following commands when using Vim 8+:

mkdir -p ~/.vim/pack/git-pack/start
git clone git://github.com/frasercrmck/formative.vim.git -- ~/.vim/pack/git-pack/start/formative.vim

Add the following to your .vimrc:

Plug 'frasercrmck/formative.vim'

Add the following lines to your .vimrc:

Plugin 'frasercrmck/formative.vim'

Then type the following in vim:

:PluginInstall

Issue the following commands:

cd ~/.vim/bundle && git clone git://github.com/frasercrmck/formative.vim.git

Don't forget to update the help with: :helptags

Customisation

You will probably need to override the default path to your clang-format.py script. The default assumes it lives in your .vim directory, i.e. ~/.vim/clang-format.py. To override this, add the following line to your .vimrc:

let g:fmtv_clang_format_py = '/path/to/my/clang-format.py'

You can remove or override the default key bindings, too. By default the plugin will map <C-K> to the plugin features. You can prevent the default mappings by setting g:fmtv_no_mappings in your .vimrc:

let g:fmtv_no_mappings = 1

Any of the mappings can be individually set or overridden in your .vimrc.

nmap MyKeyBinding <Plug>FormativeNor
vmap MyKeyBinding <Plug>FormativeVis
imap MyKeyBinding <Plug>FormativeIns
nmap MyKeyBinding <Plug>FormativeLine
nmap MyKeyBinding <Plug>FormativeFile

Note: please read the help by typing :help formative in vim for more information.