Vim 基本配置和使用 & Solarized
部分转载自:Vim初级:配置和使用感受Vim的强大:进阶技巧在VIM下写C++能有多爽?初始化过程正如多数 linux 软件,vim 的配置文件分为系统配置文件 /etc/vimrc,/usr/share/vim/ 和用户配置文件 ~/.vimrc,~/.vim/。vim 的配置文件载入过程为:/etc/vimrcHOME/.vim/,HOME/.v
·
初始化过程
- 正如多数 linux 软件,vim 的配置文件分为系统配置文件 /etc/vimrc,/usr/share/vim/ 和用户配置文件 ~/.vimrc,~/.vim/。
- vim 的配置文件载入过程为:
- /etc/vimrc
- HOME/.vim/, HOME/.vimrc
- VIMRUNTIME/.vim, VIMRUNTIME/.vimrc
- $HOME/.vim/after/
- 通过运行 $ vim -V 可查看整个初始化过程。
文件类型识别与对应插件加载
- Vim可针对特定的文件,加载指定插件。以此来实现文件类型的特殊配置以及语法高亮。
- 参见:http://vimcdoc.sourceforge.net/doc/filetype.html#filetype-plugins
- filetype on 将开启文件识别,Vim 会在载入时做如下工作:
- 执行$RUNTIMEPATH/filetype.vim,根据文件名判断类型
- 如果需要的话,执行 $RUNTIMEPATH/scripts.vim,进一步判断文件类型
- 设置 Vim 的 filetype 变量
- 我们也可以通过诸如 :set filetype=c 的命令来手动设置文件类型 如果不使用文件识别,我们可以运行 au BufNewFile,BufRead .plt source ~/.vim/after/ftplugin/plt.vim 来使用 plt.vim 初始化 .plt 文件。
- 更多关于RUNTIMEPATH :http://vimcdoc.sourceforge.net/doc/options.html#’runtimepath’
- filetype plugin on 允许Vim加载文件类型的插件,Vim会在载入时寻找并加载 RUNTIMEPATH/ftplugin.vim,该脚本会寻找并加载 RUNTIMEPATH/ftplugin/.vim。
- 例如:~/.vim/ftplugin/cpp.vim 将在 cpp 文件类型被识别后自动载入。
- 同样,~/.vim/after/ftplugin/cpp.vim 会在最后被调用,进而覆盖之前的配置。 另外,filetype indent on 允许Vim加载该文件类型的缩进设置。即执行RUNTIMEPATH/indent.vim。
语法高亮
- syntax on 允许 Vim 加载文件类型的语法高亮配置,Vim会在载入时寻找并加载 RUNTIMEPATH/syntax/.vim。
- 例如:~/.vim/syntax/markdown.vim 将会对文件类型markdown 进行语法高亮。
键盘映射
- Vim支持定义键盘映射来完成快捷键的功能,也就是将特定的按键映射为一系列按键与函数的序列。
- 例如将 F7 映射为编译当前java文件:
- map :!javac %<
- : 为进入Ex模式,! 指定下面的命令在vim外执行,% 为当前文件名,%< 为不带扩展名的当前文件名, 为回车。
- map 命令有多种工作模式,如下表。
map模式 描述
n 普通
v 可视和选择
s 选择
x 可视
o 操作符等待
! 插入和命令行
i 插入
l 插入、命令行和 Lang-Arg 模式的 “:lmap” 映射
c 命令行
- 其中,map模式可作为map命令的前缀以指定其工作模式:
命令 左边 右边 模式
:map {lhs} {rhs} mapmode-nvo
:nm[ap] {lhs} {rhs} mapmode-n
:vm[ap] {lhs} {rhs} mapmode-v
:xm[ap] {lhs} {rhs} mapmode-x
:smap {lhs} {rhs} mapmode-s
:om[ap] {lhs} {rhs} mapmode-o
:map! {lhs} {rhs} mapmode-ic
:im[ap] {lhs} {rhs} mapmode-i
:lm[ap] {lhs} {rhs} mapmode-l
:cm[ap] {lhs} {rhs} mapmode-c
- 另外,可添加nore指定非递归方式(取消传递性)。如inoremap为插入模式下工作的map,并且没有递归。
函数
- 现在我们可以自定义快捷键了,如果希望在键盘映射中执行更复杂的功能,我们需要定义Vim函数。
- 函数名必须以大写字母开始
- 函数可以有返回值:return something
- 函数可以有范围前缀。定义:function s:Save(),调用:call s:Save()
- 下面是函数调用的例子,按键F8时,进入拷贝模式(取消行号,鼠标进入visual模式)。
" key mapping
map <F8> <Esc>:call ToggleCopy()<CR>
" global variable
let g:copymode=0
" function
function ToggleCopy()
if g:copymode
set number
set mouse=a
else
set nonumber
set mouse=v
endif
let g:copymode=!g:copymode
endfunction
录制宏
- 用户录制的宏保存在寄存器中,我们先来看看什么是寄存器。vim的寄存器分为数字寄存器和字母寄存器。
- 数字寄存器为0-9,0保存着上次复制的内容,1-9按照最近的顺序保存着最近删除的内容。
- 字母寄存器为a-z,拷贝3行到寄存器c:c3yy.
- 现在开始录制宏。假如有如下的文件,我们希望将第二列的类型用`分隔起来。
1 | BOOL | Boolean
2 | SINT | Short integer
3 | INT | Integer
4 | DINT | Double integer
5 | LINT | Long integer
6 | USINT | Unsigned short integer
7 | UINT | Unsigned integer
- 首先按几次进入normal模式,光标移到第一行,开始录制并存入m寄存器qm。
- 光标到行首^,到第二列词首ww,进入插入模式i,插入分隔符
,退出到normal模式<Esc>,到词尾e,进入插入模式i,插入分隔符
,退出到normal模式,光标到下一行j。- 结束录制q。
- 光标到第二行,在normal模式执行100次寄存器m中的宏100@m。
- 宏会在j执行错误后自动结束,得到如下文件:
1 | `BOOL` | Boolean
2 | `SINT` | Short integer
3 | `INT` | Integer
4 | `DINT` | Double integer
5 | `LINT` | Long integer
6 | `USINT` | Unsigned short integer
7 | `UINT` | Unsigned integer
Vim Solarized 主题配色
- 下面只是科普,没什么用,可以自己去在线配色网站上弄一份,直接放到最后就行了
- 256个颜色到底有哪些呢?经过一番查找,我找到了如下图(出处网址http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html)
- 任意文本编辑器打开~/.vim/colors/solarized.vim。跳转到第301行
elseif g:solarized_termcolors == 256
let s:vmode = "cterm"
let s:base03 = "234"
let s:base02 = "235"
let s:base01 = "239"
let s:base00 = "240"
let s:base0 = "244"
let s:base1 = "245"
let s:base2 = "187"
let s:base3 = "230"
let s:yellow = "136"
let s:orange = "166"
let s:red = "124"
let s:magenta = "125"
let s:violet = "61"
let s:blue = "33"
let s:cyan = "37"
let s:green = "64"
- 由于本人主要是写C代码,经过了反复的测试实践,我总结的配色项目和C代码的对应关系如下(其中部分没有测出来):
项目名 影响内容
base03 不详
base02 :set list :set cursorline :set cursorcolum显示的背景
base01 普通注释颜色
base00 :set charlist标记的颜色
base0 函数名,标示符等普通字体颜色
base1 vim命令补全时,弹出选择栏的背景色
base2 vim命令补全时,弹出选择栏,当前选中项的背景色
base3 不详
yellow int char struct等变量关键字的颜色
orange #开头的宏定义关键字的颜色
red dxoygen 注释标记的颜色
magenta 不详
violet 不详
blue 不详
cyan 字符串,include中的文件名的颜色
green 关键字颜色,例如for while return if等
更多推荐
已为社区贡献2条内容
所有评论(0)