neoformat


Ⅰ. 插件描述

:sparkles: A (Neo)vim plugin for formatting code.

Ⅱ. 基本信息

创建日期:  2016-03-15
使用用户:  540
Github星:  778
插件作者:  Steve Dignam

Ⅲ. 安装方法

使用Vundle管理器安装

在你的.vimrc下添加:
Plugin 'sbdchd/neoformat'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall

对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。

使用NeoBundle管理器安装

在你的.vimrc下添加:
NeoBundle 'sbdchd/neoformat'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall

使用VimPlug管理器安装

在你的.vimrc下添加:
Plug 'sbdchd/neoformat'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall

使用Pathogen管理器安装

在终端中运行以下命令:
cd ~/.vim/bundle
git clone https://github.com/sbdchd/neoformat

Ⅳ. 文档说明

# Neoformat Build Status

A (Neo)vim plugin for formatting code.

Neoformat uses a variety of formatters for many filetypes. Currently, Neoformat
will run a formatter using the current buffer data, and on success it will
update the current buffer with the formatted text. On a formatter failure,
Neoformat will try the next formatter defined for the filetype.

By using getbufline() to read from the current buffer instead of file,
Neoformat is able to format your buffer without you having to :w your file first.
Also, by using setline(), marks, jumps, etc. are all maintained after formatting.

Neoformat supports both sending buffer data to formatters via stdin, and also
writing buffer data to /tmp/ for formatters to read that do not support input
via stdin.

Basic Usage

Format the entire buffer, or visual selection of the buffer

:Neoformat

Or specify a certain formatter (must be defined for the current filetype)

:Neoformat jsbeautify

Or format a visual selection of code in a different filetype

Note: you must use a ! and pass the filetype of the selection

:Neoformat! python

You can also pass a formatter to use

:Neoformat! python yapf

Or perhaps run a formatter on save

augroup fmt
  autocmd!
  autocmd BufWritePre * undojoin | Neoformat
augroup END

The undojoin command will put changes made by Neoformat into the same
undo-block with the latest preceding change. See
Managing Undo History.

Install

vim-plug

Plug 'sbdchd/neoformat'

Current Limitation(s)

If a formatter is either not configured to use stdin, or is not able to read
from stdin, then buffer data will be written to a file in /tmp/neoformat/,
where the formatter will then read from

Config [Optional]

Define custom formatters.

Options:

namedescriptiondefaultoptional / required
exethe name the formatter executable in the pathn/arequired
argslist of arguments[]optional
replaceoverwrite the file, instead of updating the buffer0optional
stdinsend data to the stdin of the formatter0optional
stderrcapture stderr output from formatter0optional
no_appenddo not append the path of the file to the formatter command, used when the path is in the middle of a command0optional
envlist of environment variable definitions to be prepended to the formatter command[]optional
valid_exit_codeslist of valid exit codes for formatters who do not respect common unix practices[0]optional

Example:

let g:neoformat_python_autopep8 = {
            \ 'exe': 'autopep8',
            \ 'args': ['-s 4', '-E'],
            \ 'replace': 1 " replace the file, instead of updating buffer (default: 0),
            \ 'stdin': 1, " send data to stdin of formatter (default: 0)
            \ 'env': ["DEBUG=1"], " prepend environment variables to formatter command
            \ 'valid_exit_codes': [0, 23],
            \ 'no_append': 1,
            \ }

let g:neoformat_enabled_python = ['autopep8']

Configure enabled formatters.

let g:neoformat_enabled_python = ['autopep8', 'yapf', 'docformatter']

Have Neoformat use &formatprg as a formatter

let g:neoformat_try_formatprg = 1

Enable basic formatting when a filetype is not found. Disabled by default.

" Enable alignment
let g:neoformat_basic_format_align = 1

" Enable tab to spaces conversion
let g:neoformat_basic_format_retab = 1

" Enable trimmming of trailing whitespace
let g:neoformat_basic_format_trim = 1

Run all enabled formatters (by default Neoformat stops after the first formatter
succeeds)

let g:neoformat_run_all_formatters = 1

Above options can be activated or deactivated per buffer. For example:

    " runs all formatters for current buffer without tab to spaces conversion
    let b:neoformat_run_all_formatters = 1
    let b:neoformat_basic_format_retab = 0

Have Neoformat only msg when there is an error

let g:neoformat_only_msg_on_error = 1

When debugging, you can enable either of following variables for extra logging.

let g:neoformat_verbose = 1 " only affects the verbosity of Neoformat
" Or
let &verbose            = 1 " also increases verbosity of the editor as a whole

Adding a New Formatter

Note: you should replace everything {{ }} accordingly

  1. Create a file in autoload/neoformat/formatters/{{ filetype }}.vim if it does not
    already exist for your filetype.
  2. Follow the following format

See Config above for options

function! neoformat#formatters#{{ filetype }}#enabled() abort
    return ['{{ formatter name }}', '{{ other formatter name for filetype }}']
endfunction

function! neoformat#formatters#{{ filetype }}#{{ formatter name }}() abort
    return {
        \ 'exe': '{{ formatter name }}',
        \ 'args': ['-s 4', '-q'],
        \ 'stdin': 1
        \ }
endfunction

function! neoformat#formatters#{{ filetype }}#{{ other formatter name }}() abort
  return {'exe': {{ other formatter name }}
endfunction

Managing Undo History

If you use an autocmd to run Neoformat on save, and you have your editor
configured to save automatically on CursorHold then you might run into
problems reverting changes. Pressing u will undo the last change made by
Neoformat instead of the change that you made yourself - and then Neoformat
will run again redoing the change that you just reverted. To avoid this
problem you can run Neoformat with the Vim undojoin command to put changes
made by Neoformat into the same undo-block with the preceding change. For
example:

augroup fmt
  autocmd!
  autocmd BufWritePre * undojoin | Neoformat
augroup END

When undojoin is used this way pressing u will "skip over" the Neoformat
changes - it will revert both the changes made by Neoformat and the change
that caused Neoformat to be invoked.

Supported Filetypes

添加新评论