我最近开始将vim用于我的研究生水平项目。主要问题,我有时会检查非缩进代码。我觉得如果我能以某种方式使自动缩进+保存+关闭的快捷方式,那么这应该解决我的问题。
我的.vimrc文件:
set expandtab
set tabstop=2
set shiftwidth=2
set softtabstop=2
set pastetoggle=<F2>
syntax on
filetype indent plugin on
有没有办法创建这样的命令快捷方式&amp;覆盖:x(保存+退出)。
请告诉我。
答案 0 :(得分:15)
将以下内容添加到.vimrc
:
" Restore cursor position, window position, and last search after running a
" command.
function! Preserve(command)
" Save the last search.
let search = @/
" Save the current cursor position.
let cursor_position = getpos('.')
" Save the current window position.
normal! H
let window_position = getpos('.')
call setpos('.', cursor_position)
" Execute the command.
execute a:command
" Restore the last search.
let @/ = search
" Restore the previous window position.
call setpos('.', window_position)
normal! zt
" Restore the previous cursor position.
call setpos('.', cursor_position)
endfunction
" Re-indent the whole buffer.
function! Indent()
call Preserve('normal gg=G')
endfunction
如果您希望所有文件类型在保存时自动缩进,我强烈建议,请将此挂钩添加到.vimrc
:
" Indent on save hook
autocmd BufWritePre <buffer> call Indent()
如果您只希望某些文件类型在保存时自动缩进,我建议,请按照说明操作。假设您希望C ++文件在保存时自动缩进,然后创建~/.vim/after/ftplugin/cpp.vim
并将此钩子放在那里:
" Indent on save hook
autocmd BufWritePre <buffer> call Indent()
对于任何其他文件类型也是如此,例如Java的~/.vim/after/ftplugin/java.vim
等等。
答案 1 :(得分:5)
我建议首先打开autoindent
以避免此问题。在开发的每个阶段,使用正确的缩进代码都更容易 。
set autoindent
通过:help autoindent
阅读文档。
但是, = 命令将根据文件类型的规则缩进行。您可以创建BufWritePre
autocmd来对整个文件执行缩进。
我没有对此进行测试,也不知道它的实际效果如何:
autocmd BufWritePre * :normal gg=G
阅读:help autocmd
以获取有关该主题的更多信息。 gg=g
分解为:
:normal
作为普通模式编辑命令而不是:ex
命令执行我真的不推荐这个策略。习惯使用set autoindent
代替。在所有文件上定义autocmd
可能是不明智的(与*
一样)。它只能在某些文件类型上完成:
" Only for c++ files, for example
autocmd BufWritePre *.cpp :normal gg=G
答案 2 :(得分:2)
要缩进已存在的文件,您可以使用快捷方式gg=G
(不是命令;只需按g
两次,然后按=
,再按Shift+g
),特别是因为您正在使用filetype indent
...行。