关于Vim
Vim,即Vi Improved。Vim和Emacs是两款在*nix上流行的命令行编辑器,通过手不离键盘的方式进行编辑以提高编辑效率。Vim的特色是命令模式,而Emacs是使用大量快捷键。
关于VIM的资料
Vim的几种模式
- 正常模式 打开Vim编辑器之后,直接所处的模式。
- 插入模式 可以向文件输入文字的模式
- 命令模式 按下
Esc
键后,在命令行最下方输入指令的模式。
记忆Vim快捷键的方法
- number1 operator number2 motion
number1表示将后面的命令operator number2 motion执行number1次,operator表示要执行的编辑命令,number2 motion表示operator编辑的范围是number2次的motion。 - 小写换大写
同一个字符的大小写所代表的两个命令是相关的。小写一般代表基本的操作,大写往往表示同一类操作,但是带有特殊的意味:方向相反、增强、常用操作的简写。 - 同一个字符命令重复两次
同一个字符命令重复两次和该字符本身所代表命令的含义也是相关的,一般是和该操作相关的常用操作的简化指令。 - 某个编辑/移动/…操作的快捷键往往和该操作的英文单词相关
比如d
代表delete操作;c
代表change操作
文件操作命令
命令 | 含义 |
---|
vim filename | 用vim编辑名为filename的文件 |
:e filename | 编辑名为filename的文件 |
:q | 退出编辑 |
:q! | 强制退出编辑,不保存已作修改 |
:wq | 保存已作修改并退出 |
:w filename | 将所作修改保存为文件filename |
CTRL-G | 显示当前编辑文件及文件状态信息 |
基本移动(motion)命令
命令 | 含义 |
---|
h,j,k,l | 左、下、上、右 |
w | 前进一个word |
W | 前进一个Word(只以空格作单词的划分) |
e | 移动到word末尾 |
E | 移动到Word末尾 |
0 | 移动到行首 |
$ | 移动到行末 |
^ | 移动到该行第一个非空字符 |
G | 移动到最后一行 |
number G | 移动到第number行 |
number gg | 移动到第number行 |
:number | 移动到第number行 |
number | 向下移动number行 |
gg | 移动到第一行 |
CTRL-O | 回到之前的位置 |
CTRL-I | 跳转到较新的位置 |
% | 移动到配对括号的位置*)、]、}* |
基本编辑命令
命令 | 含义 |
---|
x | 删除光标所在位置字符 |
X | 删除光标所在位置前面的字符 |
i | 在正常模式时,按下i键开始在光标处插入文本 |
I | 在行首开始插入文本 |
a | 在光标所在位置之后开始插入文本 |
A | 在行末开始插入文本 |
r | 替换光标所在位置处字符 |
R | 连续替换从光标所在位置处开始的字符 |
c | 更改命令 |
dd | 删除整行 |
yy | 复制整行 |
p | 将最后一次删除/yank的内容置于光标之后 |
p | 将最后一次删除/yank的内容置于光标之前 |
u | 撤消最后执行的命令 |
U | 撤消对整行的更改 |
CTRL-R | 重做撤消的命令,即撤消的撤消 |
搜索命令
命令 | 含义 |
---|
/string | 向前搜索字符串string |
?string | 向后搜索字符串string |
n | 继续向前搜索上一次搜索的字符串 |
N | 向后搜索上一次搜索的字符串 |
替换命令
命令 | 含义 |
---|
:s/old/new | 将所在行的第一个匹配字符串old替换为new |
:s/old/new/g | 将所在行的所有匹配字符串old替换为new |
:#,#s/old/new/g | 替换指定两行之间出现的old为new |
:%s/old/new/g | 替换整个文件中的每个匹配串 |
:%s/old/new/gc | 找到整个文件中的每个匹配串,并且对每个匹配串提示是否进行替换 |
分屏操作
命令 | 含义 |
---|
:new | 新建分屏 |
:vs filename | 以垂直分屏的方式打开文件filename |
:sp filename | 以水平分屏的方式打开文件filename |
ctrl+w然后s | 以水平分屏的方式打开当前文件 |
ctrl+w然后v | 以垂直分屏的方式打开当前文件 |
ctrl+w w/h/j/k/l | 在各个分屏间切换 |
ctrl+w </>/+/- | 更改分屏大小 |
ctrl+w = | 恢复分屏大小 |
在Vim中执行命令
分屏
命令 | 含义 |
---|
:[N]sp[lit] [++opt] [+cmd] [file] | 水平分屏,N表示新window的高度,默认和原来的window平分(高度) |
:[N]vs[plit] [++opt] [+cmd] [file] | 垂直分屏 |
:[N]new [++opt] [+cmd] | 水平分屏 |
:[N]vne[w] [++opt] [+cmd] | 垂直分屏 |
:q[uit] | 退出当前window |
:on[ly][!] | 关闭所有非当前window |
CTRL-W h/l/j/k | 在不同window中跳转 |
CTRL-W r/R/x/K/J/H/L/T | 移动window的位置,T 是移动动一个新的标签/tab |
CTRL-W = | 设置所有window等宽等高 |
:res[ize] -/+N | 减小/增加window高度 |
:res[ize] [N] | 设置window高度为N |
z{nr}<CR> | 设置window高度为{nr} |
CTRL-W </> | 减小/增加window宽度 |
:vertical res[ize] [N] | 设置window宽度 |
`CTRL-W | ` |
Vim标签页(tabpage)
Vim与系统剪切版的交互
使用*
寄存器或者+
寄存器即可。
vim --version | grep clipboard
(bash命令),如果有+clipboard
或+xterm_clipboard
,那么就可以在vim中使用系统剪贴板,否则就安装下vim-gnome或者vim-gtk吧,参考|
配置Vim
下述命令可以在打开vim后输入以进行对vim的配置,也可以保存在~/.vimrc
文件里面,这样每次打开vim时都会自动执行这些配置。
行号 | 相关配置 |
---|
:set nu | 显示行号 |
:set nonu | 不要显示行号 |
缩进 | 相关配置 |
:set autoindent | 设置自动缩进 |
:set cindent | 设置C风格的缩进 |
tab键 | 相关配置 |
:set softtabstop=4 | 设置tb键为四个空格(好像可以允许空格和tab混合,我也没怎么搞清楚) |
:set tabstop=8 | 设置显示tab时用的宽度 |
:set list
set listchars=tab:>- | 将tab键显示为>------- 的形式 |
显示行末空格 | 相关配置 |
:set list
set listchars=trail:. | 将行末空格显示为. ,listchars可以指定很多特殊字符的显示方式,要同时指定多个特殊字符的显示方式,不同特殊字符之间用, 隔开就好,例如:set listchars=tab:>-,trail:. |
文件编码设置 | 相关配置 |
:set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1 | 知乎上某大神贴出来的vimrc文件里的一行 |
编程相关命令
使用Vim的感受
- 在使用ssh的时候使用Vim是唯一的选择(其实还有nano编辑器)
- 使用Vim编辑单个文件、简单的项目还行,但是用Vim和命令行来搞大型一点的项目就特别麻烦,还是需要用IDE
- Intellij IDEA编辑器的Vim Emulator特别好用,该公司的其他IDE如PyCharm等也支持Vim Emulator
近期评论