内容来源:《vim 实用技巧》一书

vim 移动位置的键:

h 左

j 下  gj 按屏幕行向下移动

k 上  gk 按屏幕行向上移动

l 右

0 移动到行首  g0 屏幕行行首

^ 移动到实际行的第一个非空白字符 g^ 屏幕行

$ 移动到行尾 g$ 屏幕行行尾

w 正向移动到下一单词的开头

b 反向移动到上一单词的开头

e 正向移动到下一单词的结尾

ge 反向移动到上一单词的结尾


. 表示重复上一次的动作

@:表示重复上一次的Ex命令

;表示重复上一次f[c]查找


可视模式下选中字符按U 或 u是切换字符大小写

用法:

gUU 把一行中的字符变大写

guu 把一行中的字符变小写


gv 返回上一次可视块的选中状态

可视模式下按I进入插入模式,插入的字符会插入到选中的区块范围


命令行模式匹配的符号:

1 文件第一行

$ 最后一行

0 虚拟行 第一行上方

. 光标所在行

'm 包含位置标记m的行

'<,'> 高亮选区的起止行

% 表示1,$的简写即所有行


:copy :t 复制行

用法:

:[range]copy {address}

:6t. 表示把第6行复制到当前行的下一行

:t6  表示把当前行复制到第6行下方

:t.  等同于yyp

:t$  把当前行复制到文件末尾

:'<,'>t0 把高亮区段复制到文件开头


:move :m 移动行的用法类似copy


在指定范围上执行普通模式命令:

:normal i//


tab自动补全Ex命令,Ctrl+d列出补全命令的列表

习惯用bash shell的工作方式一般设置为

:set wildmode=longest,list


默认Ex命令会记录20条历史记录,

增加历史记录条数可把以下配置写入vimrc文件

set history=200


普通模式下打开查找和Ex命令历史命令的命令行窗口:

q/

q:


运行shell命令:

:!ls -lh %   

%在这里代表当前文件名

:read  ![cmd] 把shell命令执行结果插入到光标下方

:[range]write ![cmd] 把vim中的范围字段作为标准输入到shell命令

:[range]!{filter} 使用外部shell命令过滤指定的vim范围字段


vim 默认按 tab 键是向前进8个空格,即缩进的字符为8个,

可以在命令行模式用下面的设置缩进为4个空格:

set shiftwidth=4 softtabstop=4 expandtab


在普通模式下,缩进一行或是一段可以用>> <<

分别表示向右和向左缩进


一次打开多个文件的情况下

:ls 表示列出缓冲区的文件列表

:bp :bn 可上下切换打开的文件


:ls

4 %a   "ifcfg-eth0"                   第 3 行

5 #    "install.log"                  第 2 行

%在这里表示当前窗口打开的文件,#表示轮换文件,按ctrl^ 可在当前和轮换文件间切换 


参数列表:

:args

默认是打印当前参数列表的内容,

:args [file1] [file2]

设置参数列表的内容

:args **/*.*  表示把子目录下的所有文件加入缓冲区

:args `cat filelist.txt` 把shell命令执行结果中的文件作为参数加入


:qall!      退出不保存所有缓冲区的修改

:wall       保存所有缓冲区修改


水平/垂直切分窗口:Ctrl+w s/v

切分后另一个窗口打开新文件

:sp file

:vp file

切换窗口命令:

Ctrl+w w  循环切换

Ctrl+w h/j/k/l 按方向切换

:close 关闭活动窗口

:only 只保留活动窗口


Ctrl+w = 所有窗口等宽等高

Ctrl+w _ 最大化活动窗口高度

Ctrl+w | 最大化活动窗口宽度

以下是设置为N行

N Ctrl+w _

N Ctrl+w | 


打开文件:

:edit 

:edit %<tab>打开当前文件所在的路径,包含文件名

:edit %:h<tab>打开路径,不包含文件名


如果navigation在app子目录下,可以用设置path后通过find查到并打开,

:set path+=app/**

:find navigation.js


可视模式下:

a)  一对圆括号

i)  圆括号内部

at  一对XML标签

it  XML标签内部

iw  当前单词

aw  当前单词加一个空格

iW

aW

is

as

ip

ap


daw 

ciw


位置标记:

mm

`m

`` 上次跳转动作之前的位置

`.  上次修改的地方

`^  上次插入的地方

`[  上次修改或复制的起始位置

`]  上次修改或复制的结束位置

`<  上次高亮选区的起始位置

`>  上次高亮选区的结束位置


% 在匹配括号间跳转