mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-03-12 09:35:40 +08:00
Add format_on_save options (#3746)
This commit is contained in:
parent
3422243c8a
commit
b0fd3f8c1c
autoload/SpaceVim/layers
doc
docs
@ -9,16 +9,19 @@
|
|||||||
""
|
""
|
||||||
" @section format, layer-format
|
" @section format, layer-format
|
||||||
" @parentsection layers
|
" @parentsection layers
|
||||||
" SpaceVim uses neoformat as the default code format tools. Neoformat uses a
|
" format layer provides code formation for SpaceVim, the default formatting
|
||||||
" variety of formatters for many filetypes. for more info see |neoformat|
|
" plugin is |neoformat|.
|
||||||
" if you want to run a formatter on save, just put this config into bootstrap
|
" @subsection options
|
||||||
" function.
|
" format_on_save: disabled by default.
|
||||||
" >
|
"
|
||||||
" augroup fmt
|
"
|
||||||
" autocmd!
|
|
||||||
" autocmd BufWritePre * undojoin | Neoformat
|
if exists('s:format_on_save')
|
||||||
" augroup END
|
finish
|
||||||
" <
|
else
|
||||||
|
let s:format_on_save = 0
|
||||||
|
let s:format_ft = []
|
||||||
|
endif
|
||||||
|
|
||||||
function! SpaceVim#layers#format#plugins() abort
|
function! SpaceVim#layers#format#plugins() abort
|
||||||
return [
|
return [
|
||||||
@ -28,4 +31,37 @@ endfunction
|
|||||||
|
|
||||||
function! SpaceVim#layers#format#config() abort
|
function! SpaceVim#layers#format#config() abort
|
||||||
call SpaceVim#mapping#space#def('nnoremap', ['b', 'f'], 'Neoformat', 'format-code', 1)
|
call SpaceVim#mapping#space#def('nnoremap', ['b', 'f'], 'Neoformat', 'format-code', 1)
|
||||||
|
augroup spacevim_layer_format
|
||||||
|
autocmd!
|
||||||
|
autocmd BufWritePre * call s:format()
|
||||||
|
augroup END
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SpaceVim#layers#format#set_variable(var) abort
|
||||||
|
let s:format_on_save = get(a:var, 'format_on_save', s:format_on_save)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SpaceVim#layers#format#get_options() abort
|
||||||
|
|
||||||
|
return ['format_on_save']
|
||||||
|
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SpaceVim#layers#format#add_filetype(ft) abort
|
||||||
|
if get(a:ft, 'enable', 0)
|
||||||
|
if index(s:format_ft, a:ft.filetype) ==# -1
|
||||||
|
call add(s:format_ft, a:ft.filetype)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if index(s:format_ft, a:ft.filetype) !=# -1
|
||||||
|
call remove(s:format_ft, a:ft.filetype)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:format() abort
|
||||||
|
if !empty(&ft) &&
|
||||||
|
\ ( index(s:format_ft, &ft) !=# -1 || s:format_on_save ==# 1)
|
||||||
|
undojoin | Neoformat
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
" This layer provides syntax highlighting for actionscript. To enable this
|
" This layer provides syntax highlighting for actionscript. To enable this
|
||||||
" layer:
|
" layer:
|
||||||
" >
|
" >
|
||||||
" [layers]
|
" [[layers]]
|
||||||
" name = "lang#actionscript"
|
" name = "lang#actionscript"
|
||||||
" <
|
" <
|
||||||
|
|
||||||
|
@ -138,10 +138,10 @@ function! s:language_specified_mappings() abort
|
|||||||
|
|
||||||
" Format on save
|
" Format on save
|
||||||
if s:format_on_save
|
if s:format_on_save
|
||||||
augroup SpaceVim_layer_lang_python
|
call SpaceVim#layers#format#add_filetype({
|
||||||
autocmd!
|
\ 'filetype' : 'python',
|
||||||
autocmd BufWritePre *.py undojoin | Neoformat
|
\ 'enable' : 1,
|
||||||
augroup end
|
\ })
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -28,6 +28,20 @@
|
|||||||
" ''
|
" ''
|
||||||
" ]
|
" ]
|
||||||
" <
|
" <
|
||||||
|
" 2. ruby_repl_command: the REPL command for ruby
|
||||||
|
" >
|
||||||
|
" [[layers]]
|
||||||
|
" name = 'lang#ruby'
|
||||||
|
" ruby_repl_command = '~/download/bin/ruby_repl'
|
||||||
|
" <
|
||||||
|
" 3. format_on_save: enable/disable code formation when save ruby file. This
|
||||||
|
" options is disabled by default, to enable it:
|
||||||
|
" >
|
||||||
|
" [[layers]]
|
||||||
|
" name = 'lang#ruby'
|
||||||
|
" ruby_repl_command = '~/download/bin/ruby_repl'
|
||||||
|
" format_on_save = true
|
||||||
|
" <
|
||||||
" @subsection Key bindings
|
" @subsection Key bindings
|
||||||
"
|
"
|
||||||
" >
|
" >
|
||||||
@ -47,13 +61,26 @@
|
|||||||
" <
|
" <
|
||||||
"
|
"
|
||||||
|
|
||||||
|
|
||||||
|
if exists('s:ruby_file_head')
|
||||||
|
finish
|
||||||
|
else
|
||||||
|
let s:ruby_repl_command = ''
|
||||||
|
let s:ruby_file_head = [
|
||||||
|
\ '#!/usr/bin/ruby -w',
|
||||||
|
\ '# -*- coding : utf-8 -*-',
|
||||||
|
\ ''
|
||||||
|
\ ]
|
||||||
|
let s:format_on_save = 0
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
function! SpaceVim#layers#lang#ruby#plugins() abort
|
function! SpaceVim#layers#lang#ruby#plugins() abort
|
||||||
return [
|
return [
|
||||||
\ ['vim-ruby/vim-ruby', { 'on_ft' : 'ruby' }]
|
\ ['vim-ruby/vim-ruby', { 'on_ft' : 'ruby' }]
|
||||||
\ ]
|
\ ]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let s:ruby_repl_command = ''
|
|
||||||
|
|
||||||
function! SpaceVim#layers#lang#ruby#config() abort
|
function! SpaceVim#layers#lang#ruby#config() abort
|
||||||
call SpaceVim#plugins#runner#reg_runner('ruby', {
|
call SpaceVim#plugins#runner#reg_runner('ruby', {
|
||||||
@ -70,15 +97,10 @@ function! SpaceVim#layers#lang#ruby#config() abort
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let s:ruby_file_head = [
|
|
||||||
\ '#!/usr/bin/ruby -w',
|
|
||||||
\ '# -*- coding : utf-8 -*-',
|
|
||||||
\ ''
|
|
||||||
\ ]
|
|
||||||
|
|
||||||
function! SpaceVim#layers#lang#ruby#set_variable(var) abort
|
function! SpaceVim#layers#lang#ruby#set_variable(var) abort
|
||||||
let s:ruby_repl_command = get(a:var, 'repl_command', '')
|
let s:ruby_repl_command = get(a:var, 'repl_command', '')
|
||||||
let s:ruby_file_head = get(a:var, 'ruby-file-head', s:ruby_file_head)
|
let s:ruby_file_head = get(a:var, 'ruby-file-head', s:ruby_file_head)
|
||||||
|
let s:format_on_save = get(a:var, 'format_on_save', s:format_on_save)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:language_specified_mappings() abort
|
function! s:language_specified_mappings() abort
|
||||||
|
@ -100,12 +100,13 @@ function! SpaceVim#layers#lang#rust#config() abort
|
|||||||
" Disable racer format, use Neoformat instead!
|
" Disable racer format, use Neoformat instead!
|
||||||
let g:rustfmt_autosave = 0
|
let g:rustfmt_autosave = 0
|
||||||
if s:format_on_save
|
if s:format_on_save
|
||||||
augroup SpaceVim_layer_lang_rust
|
call SpaceVim#layers#format#add_filetype({
|
||||||
autocmd!
|
\ 'filetype' : 'rust',
|
||||||
autocmd BufWritePre *.rs undojoin | Neoformat
|
\ 'enable' : 1,
|
||||||
augroup end
|
\ })
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
call SpaceVim#mapping#space#regesit_lang_mappings('rust', function('s:language_specified_mappings'))
|
call SpaceVim#mapping#space#regesit_lang_mappings('rust', function('s:language_specified_mappings'))
|
||||||
call add(g:spacevim_project_rooter_patterns, 'Cargo.toml')
|
call add(g:spacevim_project_rooter_patterns, 'Cargo.toml')
|
||||||
|
|
||||||
@ -207,11 +208,11 @@ function! s:execCMD(cmd) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"
|
"
|
||||||
"#用于更新 toolchain
|
" toolchain
|
||||||
"
|
"
|
||||||
" set RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
|
" set RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
|
||||||
"
|
"
|
||||||
" #用于更新 rustup
|
" rustup
|
||||||
"
|
"
|
||||||
" set RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
|
" set RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
|
||||||
"
|
"
|
||||||
|
@ -1388,15 +1388,12 @@ Mappings:
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
FORMAT *SpaceVim-layer-format*
|
FORMAT *SpaceVim-layer-format*
|
||||||
|
|
||||||
SpaceVim uses neoformat as the default code format tools. Neoformat uses a
|
format layer provides code formation for SpaceVim, the default formatting
|
||||||
variety of formatters for many filetypes. for more info see |neoformat| if you
|
plugin is |neoformat|.
|
||||||
want to run a formatter on save, just put this config into bootstrap function.
|
OPTIONS
|
||||||
>
|
format_on_save: disabled by default.
|
||||||
augroup fmt
|
|
||||||
autocmd!
|
|
||||||
autocmd BufWritePre * undojoin | Neoformat
|
|
||||||
augroup END
|
|
||||||
<
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
GITHUB *SpaceVim-layer-github*
|
GITHUB *SpaceVim-layer-github*
|
||||||
@ -1468,7 +1465,7 @@ LANG#ACTIONSCRIPT *SpaceVim-layer-lang-actionscript*
|
|||||||
This layer provides syntax highlighting for actionscript. To enable this
|
This layer provides syntax highlighting for actionscript. To enable this
|
||||||
layer:
|
layer:
|
||||||
>
|
>
|
||||||
[layers]
|
[[layers]]
|
||||||
name = "lang#actionscript"
|
name = "lang#actionscript"
|
||||||
<
|
<
|
||||||
|
|
||||||
@ -2855,6 +2852,21 @@ OPTIONS
|
|||||||
'# -*- coding : utf-8 -*-'
|
'# -*- coding : utf-8 -*-'
|
||||||
''
|
''
|
||||||
]
|
]
|
||||||
|
<
|
||||||
|
2. ruby_repl_command: the REPL command for ruby
|
||||||
|
|
||||||
|
>
|
||||||
|
[[layers]]
|
||||||
|
name = 'lang#ruby'
|
||||||
|
ruby_repl_command = '~/download/bin/ruby_repl'
|
||||||
|
<
|
||||||
|
3. format_on_save: enable/disable code formation when save ruby file. This
|
||||||
|
options is disabled by default, to enable it:
|
||||||
|
>
|
||||||
|
[[layers]]
|
||||||
|
name = 'lang#ruby'
|
||||||
|
ruby_repl_command = '~/download/bin/ruby_repl'
|
||||||
|
format_on_save = true
|
||||||
<
|
<
|
||||||
KEY BINDINGS
|
KEY BINDINGS
|
||||||
|
|
||||||
|
@ -18,11 +18,12 @@ commentsID: "使用 Vim 搭建基本开发环境"
|
|||||||
- [安装](#安装)
|
- [安装](#安装)
|
||||||
- [基本配置](#基本配置)
|
- [基本配置](#基本配置)
|
||||||
- [基本使用](#基本使用)
|
- [基本使用](#基本使用)
|
||||||
- [文件及窗口操作](#文件及窗口操作)
|
- [文件及窗口操作](#文件及窗口操作)
|
||||||
|
- [代码格式化](#代码格式化)
|
||||||
|
|
||||||
<!-- vim-markdown-toc -->
|
<!-- vim-markdown-toc -->
|
||||||
|
|
||||||
### 安装
|
## 安装
|
||||||
|
|
||||||
在入门指南里,介绍了不同系统安装 SpaceVim 的步骤。在安装过程中还是存在一些问题,比如颜色主题看上去和官网不一致,出现各种字体乱码。
|
在入门指南里,介绍了不同系统安装 SpaceVim 的步骤。在安装过程中还是存在一些问题,比如颜色主题看上去和官网不一致,出现各种字体乱码。
|
||||||
安装 SpaceVim 最理想的环境是 neovim + nerdfont + 一个支持真色的终端模拟器。
|
安装 SpaceVim 最理想的环境是 neovim + nerdfont + 一个支持真色的终端模拟器。
|
||||||
@ -38,7 +39,7 @@ commentsID: "使用 Vim 搭建基本开发环境"
|
|||||||
|
|
||||||
{% include bilibilivedio.html id="aid=51967466&cid=90976280&page=1" %}
|
{% include bilibilivedio.html id="aid=51967466&cid=90976280&page=1" %}
|
||||||
|
|
||||||
### 基本配置
|
## 基本配置
|
||||||
|
|
||||||
SpaceVim 的配置文件有两种,一种是全局配置文件(`~/.SpaceVim.d/init.toml`),
|
SpaceVim 的配置文件有两种,一种是全局配置文件(`~/.SpaceVim.d/init.toml`),
|
||||||
另外一种是项目专属配置文件,即为项目根目录的配置(`.SpaceVim.d/init.toml`)。
|
另外一种是项目专属配置文件,即为项目根目录的配置(`.SpaceVim.d/init.toml`)。
|
||||||
@ -51,7 +52,7 @@ SpaceVim 的配置文件有两种,一种是全局配置文件(`~/.SpaceVim.d/i
|
|||||||
|
|
||||||
{% include bilibilivedio.html id="aid=71915741&cid=124611019&page=1" %}
|
{% include bilibilivedio.html id="aid=71915741&cid=124611019&page=1" %}
|
||||||
|
|
||||||
### 基本使用
|
## 基本使用
|
||||||
|
|
||||||
首先,需要了解下 SpaceVim 启动后几个界面元素:顶部标签栏、底部状态栏。
|
首先,需要了解下 SpaceVim 启动后几个界面元素:顶部标签栏、底部状态栏。
|
||||||
可以看到,顶部标签栏通常只有一个,主要用来列出已经打开的文件或者是标签页,并以序号标记。
|
可以看到,顶部标签栏通常只有一个,主要用来列出已经打开的文件或者是标签页,并以序号标记。
|
||||||
@ -64,4 +65,6 @@ SpaceVim 的配置文件有两种,一种是全局配置文件(`~/.SpaceVim.d/i
|
|||||||
SpaceVim 会在状态栏展示各个窗口的编号,可以使用快捷键 `SPC + 数字` 快速跳到对应的窗口,在顶部标签栏,会列出当前已经打开的文件或者标签裂变,
|
SpaceVim 会在状态栏展示各个窗口的编号,可以使用快捷键 `SPC + 数字` 快速跳到对应的窗口,在顶部标签栏,会列出当前已经打开的文件或者标签裂变,
|
||||||
可以使用快捷键 `Leader + 数字` 快速跳到对应的文件。在这里默认的 Leader 是 `\` 键。
|
可以使用快捷键 `Leader + 数字` 快速跳到对应的文件。在这里默认的 Leader 是 `\` 键。
|
||||||
|
|
||||||
|
### 代码格式化
|
||||||
|
|
||||||
|
代码格式化这一功能由 `format` 模块提供,默认该模块已启用,手动格式化快捷键为 `SPC b f`。
|
||||||
|
@ -12,23 +12,66 @@ lang: zh
|
|||||||
- [模块简介](#模块简介)
|
- [模块简介](#模块简介)
|
||||||
- [启用模块](#启用模块)
|
- [启用模块](#启用模块)
|
||||||
- [模块设置](#模块设置)
|
- [模块设置](#模块设置)
|
||||||
|
- [模块选项](#模块选项)
|
||||||
|
- [全局选项](#全局选项)
|
||||||
|
|
||||||
<!-- vim-markdown-toc -->
|
<!-- vim-markdown-toc -->
|
||||||
|
|
||||||
## 模块简介
|
## 模块简介
|
||||||
|
|
||||||
该模块为 SpaceVim 提供代码格式化的功能,使用了 Vim8/neovim 的异步特性。引入了插件 [neoformat](https://github.com/sbdchd/neoformat)
|
`format` 模块为 SpaceVim 提供代码格式化的功能,使用了 Vim8/neovim 的异步特性。引入了插件 [neoformat](https://github.com/sbdchd/neoformat)。
|
||||||
|
|
||||||
## 启用模块
|
## 启用模块
|
||||||
|
|
||||||
可通过在配置文件内加入如下配置来启用该模块:
|
`format` 模块默认已经启用,如果需要禁用该模块,可以在配置文件中添加如下配置:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[[layers]]
|
[[layers]]
|
||||||
name = "format"
|
name = "format"
|
||||||
|
enable = false
|
||||||
```
|
```
|
||||||
|
|
||||||
## 模块设置
|
## 模块设置
|
||||||
|
|
||||||
neoformat 这一插件为不同语言做了很好的默认配置,只需要安装对应的格式化命令即可。当然,neoformat 也支持自定义配置。
|
### 模块选项
|
||||||
可以在 SpaceVim 启动函数里设置相关插件选项。
|
|
||||||
|
- **`format_on_save`**: 这一模块选项是用于设置是否在保存文件时自动进行格式化,默认是禁用的,
|
||||||
|
如果需要启用该功能,可以在设置文件中加入以下内容:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[[layers]]
|
||||||
|
name = "format"
|
||||||
|
format_on_save = true
|
||||||
|
```
|
||||||
|
|
||||||
|
这一选项可以被语言模块中的 `format_on_save` 选项所覆盖。比如,为所有文件类型启用自动格式化,但是 Python
|
||||||
|
除外:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# 启用 format 模块
|
||||||
|
[[layers]]
|
||||||
|
name = 'format'
|
||||||
|
format_on_save = true
|
||||||
|
# 启用 lang#java 模块
|
||||||
|
[[layers]]
|
||||||
|
name = 'lang#python'
|
||||||
|
format_on_save = false
|
||||||
|
```
|
||||||
|
|
||||||
|
### 全局选项
|
||||||
|
|
||||||
|
neoformat 是一个格式化框架插件,该插件的所有自身选项可以在启动函数中进行设置,可以预读 `:help neoformat`
|
||||||
|
获取完整帮助。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
以下是一个为 Java 文件设置格式化命令的配置,以下配置已经包含在 `lang#java` 模块内了:
|
||||||
|
|
||||||
|
```viml
|
||||||
|
let g:neoformat_enabled_java = ['googlefmt']
|
||||||
|
let g:neoformat_java_googlefmt = {
|
||||||
|
\ 'exe': 'java',
|
||||||
|
\ 'args': ['-jar', '~/Downloads/google-java-format-1.5-all-deps.jar', '-'],
|
||||||
|
\ 'stdin': 1,
|
||||||
|
\ }
|
||||||
|
```
|
||||||
|
@ -5,18 +5,20 @@ description: "Code formatting support for SpaceVim"
|
|||||||
|
|
||||||
# [Available Layers](../) >> format
|
# [Available Layers](../) >> format
|
||||||
|
|
||||||
|
|
||||||
<!-- vim-markdown-toc GFM -->
|
<!-- vim-markdown-toc GFM -->
|
||||||
|
|
||||||
- [Description](#description)
|
- [Description](#description)
|
||||||
- [Install](#install)
|
- [Install](#install)
|
||||||
- [Configuration](#configuration)
|
- [Configuration](#configuration)
|
||||||
|
- [Layer options](#layer-options)
|
||||||
|
- [Global options](#global-options)
|
||||||
|
|
||||||
<!-- vim-markdown-toc -->
|
<!-- vim-markdown-toc -->
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
This layer provides code format feature SpaceVim, and neoformat is included in this layer.
|
`format` layer provides code formation feature for SpaceVim, this layer includes `neoformat`
|
||||||
|
as default code formation plugin.
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
@ -30,4 +32,43 @@ This layer is enabled by default. If you want to disable this layer, add followi
|
|||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
neoformat provide better default for different languages, but you can also config it in bootstrap function.
|
### Layer options
|
||||||
|
|
||||||
|
- **`format_on_save`**: This layer option is to enable/disable code formatting when save current buffer,
|
||||||
|
and it is disabled by default. To enable it:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[[layers]]
|
||||||
|
name = "format"
|
||||||
|
format_on_save = true
|
||||||
|
```
|
||||||
|
|
||||||
|
This option can be overrided by `format_on_save` in language layer. For example, enable `format_on_save`
|
||||||
|
for all filetypes expect python.
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# enable format layer
|
||||||
|
[[layers]]
|
||||||
|
name = 'format'
|
||||||
|
format_on_save = true
|
||||||
|
# enable lang#java layer
|
||||||
|
[[layers]]
|
||||||
|
name = 'lang#python'
|
||||||
|
format_on_save = false
|
||||||
|
```
|
||||||
|
|
||||||
|
### Global options
|
||||||
|
|
||||||
|
neoformat is a format framework, all of it's options can be used in bootstrap function. You can read
|
||||||
|
`:help neoformat` for more info.
|
||||||
|
|
||||||
|
here is an example for add formater for java file, and it has been included into `lang#java` layer:
|
||||||
|
|
||||||
|
```viml
|
||||||
|
let g:neoformat_enabled_java = ['googlefmt']
|
||||||
|
let g:neoformat_java_googlefmt = {
|
||||||
|
\ 'exe': 'java',
|
||||||
|
\ 'args': ['-jar', '~/Downloads/google-java-format-1.5-all-deps.jar', '-'],
|
||||||
|
\ 'stdin': 1,
|
||||||
|
\ }
|
||||||
|
```
|
||||||
|
Loading…
x
Reference in New Issue
Block a user