如何禁用 Slimv 对非 Lisp 文件的自动缩进?
How to disable automatic indentation by Slimv for non-Lisp files?
非 Slimv 行为
首先,让我展示一下未启用 Slimv 时的正常 Vim 行为。
- 新建文件:
vim foo.c
.
- 进入插入模式:i
- 输入此代码:
void f()
- 按输入
光标现在位于位置 2,1(第 2 行,第 1 列)。
Slimv 行为
安装 Slimv 后,如果我执行上述步骤,最后,我发现光标位于位置 2,5(第 2 行,第 5 列),并自动在第 5 列之前插入四个空格作为缩进。
如何为非 Lisp 文件(例如 .c
文件)禁用此 Slimv 行为?
首先,将以下两行添加到您的 vimrc
文件中:
filetype indent off
filetype plugin indent off
那你就希望它能成功吧!但是大概率不会……
如果解决方案不起作用,您可能需要进行相当复杂的操作才能解决问题。
问题是您的许多 vim 选项会不断被大量触发器和自动命令更改。我找到的唯一方法是用特殊符号标记重要选项(我不想更改的选项),然后在任何可能的影响之后强制恢复它们。所以,我在 vimrc
中做了以下操作:
augroup MyVimrc
autocmd!
augroup END
"The options I want to keep unchanged, I mark with the “❗” symbol.
"The usual exclamation sign “!” will work as well.
"Of course, you’re free using any other symbol you like,
"but don’t forget the lambda-function in the hack below.
"These are the options that may influence on the indent.
set formatoptions=j "❗
set autoindent "❗
set nosmartindent "❗
set indentexpr= "❗
set copyindent "❗
set preserveindent "❗
"And I marked with the same way a number of other
"important (for me) options… (not shown here)
"At the bottom of the vimrc file, I wrote this dirty hack.
function! s:keep_options()
for line in filter(readfile($MYVIMRC), 'v:val =~ ''\v\".*(!|❗)\s*$''')
exe line
endfor
endfunction
command! KeepOptions call <SID>keep_options()
"Note, the “OptionSet” trigger doesn’t work always, so that I preferred “BufEnter”.
autocmd MyVimrc BufEnter * KeepOptions
我的设置中不可预料的变化所带来的所有麻烦,终于都消失了。
问题是由 paredit.vim 中的这一行引起的:
filetype indent on
我在 paredit.vim 中添加了选项 g:paredit_disable_ftindent
以禁用缩进文件的加载,请在使用 paredit.vim(或 slimv 时)将此行添加到您的 .vimrc
还包含 paredit.vim):
let g:paredit_disable_ftindent=1
非 Slimv 行为
首先,让我展示一下未启用 Slimv 时的正常 Vim 行为。
- 新建文件:
vim foo.c
. - 进入插入模式:i
- 输入此代码:
void f()
- 按输入
光标现在位于位置 2,1(第 2 行,第 1 列)。
Slimv 行为
安装 Slimv 后,如果我执行上述步骤,最后,我发现光标位于位置 2,5(第 2 行,第 5 列),并自动在第 5 列之前插入四个空格作为缩进。
如何为非 Lisp 文件(例如 .c
文件)禁用此 Slimv 行为?
首先,将以下两行添加到您的 vimrc
文件中:
filetype indent off
filetype plugin indent off
那你就希望它能成功吧!但是大概率不会……
如果解决方案不起作用,您可能需要进行相当复杂的操作才能解决问题。
问题是您的许多 vim 选项会不断被大量触发器和自动命令更改。我找到的唯一方法是用特殊符号标记重要选项(我不想更改的选项),然后在任何可能的影响之后强制恢复它们。所以,我在 vimrc
中做了以下操作:
augroup MyVimrc
autocmd!
augroup END
"The options I want to keep unchanged, I mark with the “❗” symbol.
"The usual exclamation sign “!” will work as well.
"Of course, you’re free using any other symbol you like,
"but don’t forget the lambda-function in the hack below.
"These are the options that may influence on the indent.
set formatoptions=j "❗
set autoindent "❗
set nosmartindent "❗
set indentexpr= "❗
set copyindent "❗
set preserveindent "❗
"And I marked with the same way a number of other
"important (for me) options… (not shown here)
"At the bottom of the vimrc file, I wrote this dirty hack.
function! s:keep_options()
for line in filter(readfile($MYVIMRC), 'v:val =~ ''\v\".*(!|❗)\s*$''')
exe line
endfor
endfunction
command! KeepOptions call <SID>keep_options()
"Note, the “OptionSet” trigger doesn’t work always, so that I preferred “BufEnter”.
autocmd MyVimrc BufEnter * KeepOptions
我的设置中不可预料的变化所带来的所有麻烦,终于都消失了。
问题是由 paredit.vim 中的这一行引起的:
filetype indent on
我在 paredit.vim 中添加了选项 g:paredit_disable_ftindent
以禁用缩进文件的加载,请在使用 paredit.vim(或 slimv 时)将此行添加到您的 .vimrc
还包含 paredit.vim):
let g:paredit_disable_ftindent=1