计算机 · 2021年12月7日 0

VIM

关于Vim

Vim,即Vi Improved。Vim和Emacs是两款在*nix上流行的命令行编辑器,通过手不离键盘的方式进行编辑以提高编辑效率。Vim的特色是命令模式,而Emacs是使用大量快捷键。

关于VIM的资料

  • 官网
  • 在命令模式下通过:help可以查看Vim的帮助文档
  • 通过:help tutor学习VIM
  • 通过付费游戏VIM Adventures学习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替换指定两行之间出现的oldnew
:%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中执行命令

命令含义
:!command执行命令command

分屏

命令含义
:[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