vim配置,附带中文注释

忘了具体是怎么接触到vim的。隐约的记忆中,大概是想学c语言时,找ide时偶然从网上看到的关于“神之编辑器”emacs和“编辑器之神”vim的信仰之争。才初次了解这两款软件的。

我至今仍然在两个阵营中徘徊。企图用emacs装逼却不得其门而入,倒是vim算是初步掌握了吧!反正日常用是没问题。 vim即使不配置,使用起来也还是很方便的。不过如果是在常用的主机或服务器上使用的话,按自己的习惯进行配置还是相当有必要的。下面就是记录我所知道的配置,并尽量附以注释。随着时间推移,对vim了解加深后可能还会更新,增改一些配置。


2020.11.26 变更点:

  • 加入F5一键运行python3和shell脚本
  • fcitx输入法在普通模式下自动切换为英文状态[小改进,但极大提升了中文输入法的一个使用体验]
  • 去除了一些鸡肋的自定义按键。
" [2020-11-26 09:58:00]
" linux配置文件名为".vimrc",放在用户的home目录下,如:/home/test/.vimrc
" windows配置文件名为"_vimrc",放在用户目录下,如: c:\User\Administrator\_vimrc
""""" 功能 """""
""" 编码
set encoding=utf-8      " 以设定的编码读入文本,不影响保存。
"set fileencoding=utf-8  " Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。 
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1  " 逐一检测所打开文件的编码是否符号列表的编码。若是,则以该编码打开。
set termencoding=utf-8  " Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。(对gui模式的gvim无效)
""" 缩进
set tabstop=4       " 制表符的宽度
set softtabstop=4   " 一个<tab>或<backspace>的宽度
set shiftwidth=4    " 自动缩进的宽度
" set expandtab       " 输入的<tab>键将转化为空格键
" 以下缩进,三选其一,不用的注释掉。
"set cindent         " c语言风格缩进
"set autoindent      " 自动缩进,当前行缩进和上一行的缩进相同
set smartindent     " 智能缩进,当前行缩进和上一行的缩进相同,同时能识别"{"
set bs=indent,eol,start
set nocompatible    " 关闭vi兼容
set autoread        " 当文件有改动时,自动重载文件
set mouse=a         " 鼠标支持

""""" 视觉 """""
colorscheme desert      " 主题选择,可根据喜好自行更改
syntax on           " 语法高亮
set number          " 显示行号
set relativenumber  " 显示相对行号
set statusline=%l,%v    " 状态行显示格式设置
set laststatus=2    " 0不显示状态行,1仅当多于一个窗口时显示,2总是显示
set foldenable      " 允许折叠
set foldmethod=indent      " 折叠模式:indent自动,manual手动。
set foldlevelstart=99      " 默认展开所有折叠
set cursorcolumn    " 高亮光标列
set cursorline      " 高亮光标行
set hlsearch        " 高亮匹配
set incsearch       " 即时匹配
set ignorecase      " 查找忽略大小写
set ru              " 状态栏标尺
" set list            " 显示空白字符(tab,换行等等之类)

""""" 缩略词 """""

""""" 快捷键 """""
" <c-a>,<a-a>,<s-a>分别表示 Ctrl-a, Alt-a, Shift-a.
" 大小写注意,如<c-a>和<c-A>是不同的组合键,在小写状态下,<c-A>就是Ctrl-Shift-a,大写状态下则是Ctrl-a.
""" 注意: 避免绑定一些全局按键,以下是几个全局按键的例子。
" <c-s>和<c-q>,<c-s>一般是终端停止屏幕输出的全局快捷键,看起来会像卡死了(按<c-q>恢复)。
" <c-c>,强制关闭终端
" <c-z>,挂起程序,切到shell(之后在shell下,输入fg返回)

" 更改<Leader>键(如果有需要的话)
let mapleader = "\<space>"

""" 普通模式
" 在上/下行,添加空行
nnoremap <s-cr> O<esc>
nnoremap <c-cr> o<esc>


""" 插入模式
" 跳到上/下行的末尾
inoremap <s-cr> <esc>kA
inoremap <c-cr> <esc>jA
inoremap jk <esc>
inoremap xtime <c-r>=strftime("[%Y-%m-%d %H:%M:%S]")<cr>



""" 一键执行脚本
" 按F5执行脚本:python,shell
map <F5> :call RunScript()<CR>
func RunScript()
    exec "w"
    if &filetype == 'python'
        exec "!time python3 %"
    elseif &filetype == 'sh'
        exec "!time bash %"
    elseif &filetype == 'markdown'
        exec "!/opt/apps/io.typora/files/typora/Typora %"
    endif
endfunc

""" fcitx 输入法相关:普通模式下,关闭输入法
let g:input_toggle = 1
" 切换Fcitx到英文
function! Fcitx2en()
   let s:input_status = system("fcitx-remote")
   if s:input_status == 2
	  let g:input_toggle = 1
	  let l:a = system("fcitx-remote -c")
   endif
endfunction

" 切换Fcitx到中文
function! Fcitx2zh()
   let s:input_status = system("fcitx-remote")
   if s:input_status != 2 && g:input_toggle == 1
	  let l:a = system("fcitx-remote -o")
	  let g:input_toggle = 0
   endif
endfunction

set timeoutlen=150
" 离开插入状态时,关闭fcitx
autocmd InsertLeave * call Fcitx2en()
"autocmd InsertEnter * call Fcitx2zh()

2020.10.10 重新排版,用空格对齐注释

"[2020-10-10 13:25:17]
" 该配置的文件名,及存放位置。
" linux文件名为".vimrc",放在用户的home目录下,如:/home/test/.vimrc
" windows文件名为"_vimrc",放在用户目录下,如: c:\User\Administrator\_vimrc
""""" 功能 """""
""" 编码
set encoding=utf-8          " 以设定的编码读入文本,不影响保存。
"set fileencoding=utf-8     " Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。 
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1  " 逐一检测所打开文件的编码是否符号列表的编码。若是,则以该编码打开。
set termencoding=utf-8      " Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。(对gui模式的gvim无效)
""" 缩进
set tabstop=4               " 制表符的宽度
set softtabstop=4           " 一个<tab>或<backspace>的宽度
set shiftwidth=4            " 自动缩进的宽度
" set expandtab             " 输入的<tab>键将转化为空格键
" 以下缩进,三选其一,不用的注释掉。
"set cindent                " c语言风格缩进
"set autoindent             " 自动缩进,当前行缩进和上一行的缩进相同
set smartindent             " 智能缩进,当前行缩进和上一行的缩进相同,同时能识别"{"
set bs=indent,eol,start
set nocompatible            " 关闭vi兼容
set autoread                " 当文件有改动时,自动重载文件
set mouse=a                 " 鼠标支持

""""" 视觉 """""
colorscheme desert          " 主题选择,可根据喜好自行更改
syntax on                   " 语法高亮
set number                  " 显示行号
set relativenumber          " 显示相对行号
set statusline=%l,%v        " 状态行显示格式设置
set laststatus=2            " 0不显示状态行,1仅当多于一个窗口时显示,2总是显示
set foldenable              " 允许折叠
set foldmethod=inden        " 折叠模式:indent自动,manual手动。
set foldlevelstart=99       " 默认打开不折叠
set cursorcolumn            " 高亮光标列
set cursorline              " 高亮光标行
set hlsearch                " 高亮匹配
set incsearch               " 即时匹配
set ignorecase              " 查找忽略大小写
set ru                      " 状态栏标尺
" set list                  " 显示空白字符(tab,换行等等之类)

""""" 缩略词 """""

""""" 快捷键 """""
" 注意避免绑定一些全局按键,以下是几个全局按键的例子。
" <c-s>和<c-q>,<c-s>一般是终端停止屏幕输出的全局快捷键,看起来会像卡死了(按<c-q>恢复)。
" <c-c>,强制关闭终端
" <c-z>,挂起程序,切到shell(之后在shell下,输入fg返回)

""" 普通模式
" 在上/下行,添加空行
nnoremap <c-cr> o<esc>
nnoremap <s-cr> O<esc>


""" 插入模式
" 插入模式位移,分别下列四行依次是:是左下上右
inoremap <c-h> <left>
inoremap <c-j> <down>
inoremap <c-k> <up>
inoremap <c-l> <right>
"inoremap <c-d> <del>
inoremap <a-d> <c-o>ciw
inoremap <c-cr> <esc>jA
inoremap <s-cr> <esc>kA
inoremap jk <esc>
inoremap xtime <c-r>=strftime("[%Y-%m-%d %H:%M:%S]")<cr>
" 设定中文关键字退出到普通模式
" 为熟悉jk退出模式,可将<esc>禁用掉
" inoremap <esc> <nop>

2018.8.24 我已经皈依vim教了,emacs什么的,顾名思义,是神用的编辑器。身为凡人还是老老实实的用vim吧。 2019.4.29 编程过程中,有些语言是要严格区别空白字符的(如:python的tab和空格),一个不注意就可能引发难以查找的错误. 所以,配置中有set expandtab将tab键转换成空格,而这次又添加了一条set list语句,可以显示出空白符(tab键好像是^I,行尾符是$,颜色都是区别于正常字符的,所以不用担心认错.

"[2020-04-04 01:08:06]
""""" 功能 """""
""" 编码
set encoding=utf-8      " 以设定的编码读入文本,不影响保存。
set fileencoding=utf-8  " Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。 
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1  " 逐一检测所打开文件的编码是否符号列表的编码。若是,则以该编码打开。
set termencoding=utf-8  " Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。(对gui模式的gvim无效)

""" 缩进
set tabstop=4           " 制表符的宽度
set softtabstop=4       " 一个<tab>键宽度
set shiftwidth=4       " 换行自动缩进的列数
" 以下缩进,三选其一,不用的注释掉。
"set cindent         " c语言风格缩进
"set autoindent      " 自动缩进,当前行缩进和上一行的缩进相同
set smartindent     " 智能缩进,当前行缩进和上一行的缩进相同,同时能识别"{"

" 以下两行二选一
"set expandtab					" 转换制表符
set noexpandtab				" 不转换制表符

set bs=indent,eol,start
set nocompatible    " 关闭vi兼容
set autoread        " 当文件有改动时,自动重载文件
set mouse=a         " 鼠标支持


""""" 视觉 """""
colorscheme desert      " 主题
syntax on           " 语法高亮
set number          " 显示行号
set relativenumber  " 显示相对行号
set statusline=%l,%v    " 状态行显示格式设置
set laststatus=2    " 0不显示状态行,1仅当多于一个窗口时显示,2总是显示
set foldenable      " 允许折叠
set foldmethod=indent      " 折叠模式:indent自动,manual手动。
set foldlevelstart=99       " 文件打开时,自动折叠的级别
set cursorcolumn    " 高亮光标列
set cursorline      " 高亮光标行
set hlsearch        " 高亮匹配
set incsearch       " 即时匹配
set ignorecase      " 查找忽略大小写
set ru              " 状态栏标尺
set list            " 显示空白字符(tab,换行等等之类)