^v^

知行合一 止于至善

简单的VIM配置

05 Mar 2015 » 工具


理念: 结合使用方法和应用场景。

:Linux编译使用v7.4.2220版本。

基础

范围

t 截止位置

t指定截止位置,例如dts删除字符直到碰到字符s为止。

特殊位置

gg 文件头

G 文件尾

^ 行首

$ 行尾

`. 上次编辑位置

打开文件后,跳转到最近一次修改的位置。

’’ 回到上次位置

跳转

跳转前加数字。

窗口间跳转

ctrl + w + k/j/h/l

j向下,k向上

上下左右

移动到前一个访问的窗口: ctrl + w + p,代码窗口和quickfix窗口是高频访问切换的窗口。

在所有窗口中移动: ctrl + w + w

屏幕内跳转

c-d 下移半屏

c-u 上移半屏

光标移动到屏幕顶部 H

光标移动到屏幕中间 M

光标移动到屏幕底部 L

将所在行移动到屏幕中间 zz

  1. 搜索world,跳转到world,zz将所在行移动到屏幕中央;

行间跳转

j 向下, k 向上

EasyMotion行间跳转

fj 向下给行标记,然后选择标记字符跳转。fk向下标记。

字间跳转

w 向前,b 向后

EasyMotion字间跳转

fl 向右给word标记,然后选择标记字符跳转。

字符间跳转

l 向右, h 向左

搜索

渐进搜索

/ 向下搜索,?向上搜索。

搜索后,通过n或者N,选择待选项。

EasyMotion 渐进搜索

/ 向下搜索

正则搜索

vimgrep /patter/%

bo cw打开quickfix窗口显示搜索结果。

cscope 搜索

cs f s name

cs f t name

编辑

进入编辑模式

i 光标位置前插入, I 行首插入。

a 字符后面追加,A 行尾追加

o 前一行,O后一行

  1. i光标前插入,a光标后追加;I行首插入,A行尾追加
  2. 剪切命令也能进入编辑模式

剪切 c

cw 剪切word

cl 剪切字符

粘贴 p

删除 d

复制 y

撤销 u

撤销 undo

重做 c-r

重做 redo

可视模式

选中一块编辑区域,执行删除、插入等操作。

进入

v

字符为单位选择区域。

V

为单位选择区域。

ctrl+v

为单位选择区域。

gv 重复最近一次选择

quickfix

bo cw 打开窗口

o

t

q

小技巧

vi替代vim

目的:减少输入的字符数量。

$ ls -l /usr/bin/vi
lrwxr-xr-x  1 root  wheel  3 11 15 20:52 /usr/bin/vi -> vim

大小写转换

先使用v模式选中待转换的单词。

gu/gU

gu 转换为小写,gU转换为大写。

转换光标到行尾 gu$

转换光标到行首 gu^

g~

范围选择

  1. 使用可视模式
  2. gu/gU后面跟范围,例如5w,^, $

环境变量

一台服务器有多人使用,自己想使用自己的专用工具,例如vim,系统的版本比较低,自己编译一个新版本。 在自己的目录下新建.myenv文件,添加环境变量修改,例如:

export PATH=/home/wuxiangwei/mytools/vim-v7.4.2220/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/mytools/clang+llvm-5.0.0-x86_64-linux-gnu-debian8/lib

然后在.bashrc或者.zshrc文件末尾添加source ~/.myenv,连接控制台时自动初始化这些环境变量。

插件

ctags

启动

vim -t handle_peering_event 启动vim,直接跳转到handle_peering_event的定义的地方。

跳转

ctrl + ] 单屏显示 ctrl + w + ] 分屏显示

回跳

ctrl + o ctrl + t

Tagbar

说明:

  1. 标签已排序,不是tag在正文中出现的顺序;
  2. 配置了跳转到正文时关闭tagbar的功能;
  3. 管理精力,在tagbar中预览整体,在正文窗口聚焦某个子标题。

折叠

全部折叠 z + M

全部展开 z + R

单个折叠 z + c (close)

单个展开 z + o (open)

:单个折叠、展开,o即可。

预览

p

不离开tagbar窗口

jump

回车,跳转到代码窗口

大窗口

x

退出

q

quickfix的影响

使用:cw打开quickfix,在有垂直分割窗口的情况下,quickfix窗口会出现在最右侧窗口的底部。 改用:bo cw打开quickfix,quickfix窗口会出现在整个窗口的底部。

leaderf的影响

光标在tagbar窗口时执行leaderf命令,leaderf会将文件在tagbar窗口打开。为减少影响,取消autofocus配置。

cscope

搜索符号或字符串有两种场景,一种是光标就近搜索,另一种是光标不在待查找字符。第一种使用快捷键,第二种使用:cs f s

准备工作

find `pwd` -name "*.cc" -o -name "*.h" -o -name "*.c" -o -name "*.hpp" > cscope.files
cscope -bkq -i cscope.files
ctags -R

修改环境变量:CSCOPE_DB

cs f s

Ctrl + \ + s

错误操作引起分屏的问题,将\误打成]。

cs f t

Ctrl + \ + t

cs f g

转到函数定义的地方

Ctrl + \ +g

cs f c

调用该函数的地方

Ctrl + \ +c

Surround

命令模式:原生命令 + s + text-object

text-object

i 和 a:

i inner object 选中一个object的内部,不包括空格;
a an object 选中一个object,包括空格在内;

aw a word
iw inner word

aw 和 iw的区别:

a word

1. a a a a a 
2. aaaaa

假设光标在a中,yawppppp 的结果为1,yiwppppp的结果为2

w word字
p paragraph段落
s sentence

d s aw
y s aw
c s aw

Shift + ]
Shift + [
Shift + #
Shift + *

添加包围

ys

修改包围

cs

删除包围

ds

ctags插件

配置

set tags=tags;
set autochdir

在源码目录执行 ctags -R 命令。

快捷键

ctrl + ]
g ctrl + ]

Nerdtree

使用vim-nerdtree-tab插件,在新标签中显示同样的nerdtree窗口。

p 切换到父目录

t 新标签中打开

K 本目前第一个文件

和小k的方向一致,向上,只是向上到头。

J 本目录最后一个文件

和小j的方向一致,向下,只是向下到尾。

ultisnips

注意:不能设置set paste选项,否则失效。

YouCompleteMe

编译安装

cd到YCM目录,执行build.sh脚本。

安装YCM时,如果不指定–clang-completer选项,Vim敲指针->时会卡住,并且没有补全。

对Linux环境,编译过程中下载clang的速度很慢,可以先下载预编译好的,然后在build.sh中使用–system-libclang选项,不过前提条件是:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/mytools/clang+llvm-5.0.0-x86_64-linux-gnu-debian8/lib

错误1:

[100%] Linking CXX shared library /Users/wuxiangwei/.vim/bundle/YouCompleteMe/third_party/ycmd/ycm_core.so
ld: can't write output file: /Users/wuxiangwei/.vim/bundle/YouCompleteMe/third_party/ycmd/ycm_core.so for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [/Users/wuxiangwei/.vim/bundle/YouCompleteMe/third_party/ycmd/ycm_core.so] Error 1

执行./install.py --clang-completer命令报上述错误,权限问题,命令前添加sudo即可。

错误2:

NoExtraConfDetected: No .ycm_extra_conf.py file detected, so no compile flags are available. Thus no semantic support for C/C++/ObjC/ObjC++. Go READ THE DOCS *NOW*,

.vimrc文件中添加.ycm_extra_conf.py路径。

行号 numbers

相对行号,光标所在行的行号为0。

注释 nerdcommenter

相同的命令,不同的文件类型,产生不同的注释。

支持:.vimrc .c .cc markdown .py文件类型。

添加注释 cc

多行注释:n cc,命令前加数字,代码要注释的行数。删除注释也一样。

添加sexy注释:[count]cs

删除注释 cu

书签 vim-bookmark

: \.`切换到文件上次修改的地方。

打书签 mm

在要标记书签的地方,按mm即可;

显示所有书签 ma

清除所有书签 mx

清除书签 mc

跳转到书签位置,输入mc或mm,即可;

上个书签 mp

这个快捷键只能在同个文件内不同书签间切换,如果要切换到其它文件的书签,执行ma选择。

下个书签 mn

参考

  1. .vimrc文件

Related Posts