vim基本配置:包括tab键替换成4个空格
Edit Vim configuration file ".vimrc" in your HOME directory, add below lines:
set et
set ci
set sw=4
set ts=4
After new setting take effect, each time you press TAB key, it will automatically replaced by 4 SPACE and do indentation.
You can still insert real Tabs as [Ctrl]-V [Tab].
If you open an unwell indentation source code file, you can press "gg=G", all TABs will be replaced by 4 SPACE.
在使用vim编辑器的时候 很多系统里默认的vim tapstop是8,而很多时候我们需要的tapstop是4,比如在写python的时候,我们都知道python严重依赖缩进,所以tapstop是8的话 ,这个脚本比较大的时候那就相当的不好看了,所以在这种情况下修改tapstop为4还是很有必要的。
怎么设置这个东东呢?很简单 打开/etc/vimrc 加入类似这样的内容就可以了:
set tabstop=4
或者
set ts=4
然后你再用vim编辑个文件并按tab试试,就会感觉到明显的不一样。
但是问题又来了,在python脚本里,如果缩进使用tab那么就不再推荐在同一脚本里使用其他的符号来缩进,因为这很有可能导致诸多兼容性问题,比如你既使用了tab又在某些地方使用了空格来缩进,额,恭喜你,你很有可能会遇到无法执行此脚本的错误。
这个时候怎么办呢?最显而易见的方法只有一个,那就是统一使用相同的缩进方法,该是做出艰难的选择的时候了:要么用tab 要么用空格 。而很多经常使用python的同学可能会发现使用空格缩进比tab来缩进似乎更加明智,因此也极力推荐统一使用空格,这是为什么呢?当你vim编辑一个文件的时候,你能一眼就看出缩进使用的是tab吗?最有可能发生的是把tab当成了空格而不是把空格看成tab。为了避免这样的困扰,统一使用空格看起来是更好的选择。
现在你再打开vim,按下tab,再按backspace,你会发现tab出来的缩进只需要backspace一次就能删除,这足以说明这段空白是tab;然后你再次修改vimrc,并加入:
set expandtab
或
set et
再次打开vim,你会发现tab出来的空白已经变成空格了,而这个时候一个tab就真正成为4个空格了,而不仅仅是4个空格的缩进距离。这才是我们真正想要的。
那么如果你编辑了一个文件并且想要在别人修改这个文件的时候不会出现类似的疑问怎么办呢?方法有两个,一个是你告诉他,你使用的是空格还是tab,另一个方法是使用vim的modeline,当别人打开这个文件的时候会自动使用相同的配置。什么是modeline呢?就是往文件里面写入特定的行,当vim打开这个文件的时候会自动读取这一行的参数配置并调整自己的设置到这个配置,例如你可能经常会看到在有些源码的文件末尾会出现这样的行:
# vim:et:ts=4:sw=4:
这个就是modeline。当其他人的vimrc里打开了set modeline的时候,就会自动读入这个配置。
更多的信息请参考vim :help auto-setting 和:help modeline
set nocompatible "关闭vi兼容
set enc=utf-8
"set number "显示行号
filetype plugin on "文件类型
set history=500 "历史命令
syntax on "语法高亮
"set autoindent "ai 自动缩进
"set smartindent "智能缩进
set showmatch "括号匹配
set ruler "右下角显示光标状态行
set nohls "关闭匹配的高亮显示
set incsearch "设置快速搜索
set foldenable "开启代码折叠
"set fdm=manual "手动折叠
set foldmethod=syntax "自动语法折叠
set modeline "自动载入模式行
"自动插入modeline
func! AppendModeline()
let l:modeline = printf(" vim: set ts=%d sw=%d tw=%d :",
\ &tabstop, &shiftwidth, &textwidth)
let l:modeline = substitute(&commentstring, "%s", l:modeline, "")
call append(line("$"), l:modeline)
endfunc
"按\ml,自动插入modeline
nnoremap <silent> <Leader>ml :call AppendModeline()<CR>
"空格展开折叠
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
"set tabstop=4
"set shiftwidth=4
set ts=4
set sw=4
set expandtab
"自动tab
if has("autocmd")
filetype plugin indent on
endif
autocmd filetype python setlocal et sta sw=4 sts=4
"根据文件类型自动插入文件头
autocmd BufNewFile *.py,*.sh exec ":call SetTitle()"
func SetTitle()
if &filetype == 'sh'
call setline(1, "\#!/bin/bash")
call append(line("."), "\# Author:itxx00@gmail.com")
call append(line(".")+1, "")
else
call setline(1, "\#!/bin/env python")
call append(line("."), "\#coding:utf-8")
call append(line(".")+1, "\#Author:itxx00@gmail.com")
call append(line(".")+2, "")
endif
endfunc
"新建文件后自动定位至文件末尾
autocmd BufNewFile * normal G
"F2去空行
nnoremap <F2> :g/^\s*$/d<CR>