vim 入门到提高

summary

vim基础

常用的设置

基础操作:

光标的转移:

删除操作

复制操作

Vim进阶

1.自动推断  

2. 跳转

3. 列模式:

4.录制宏

5. vimdiff 


vim基础

常用的设置

ps: vim的设置, 针对当前用户的设置, 需要修改~/.vimrc, 如果没有可以自行创建

                            针对所有用户设置, 需要修改 /etc/vim/viminfo

set ts=4                ts是tabstop的缩写,设TAB宽度为4个空格。
set softtabstop=4表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab 时特别有用。
set shiftwidth=4shiftwidth 表示每一级缩进的长度,一般设置成跟 softtabstop 一样。
set expandtabexpandtab表示缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进。
set autoindentautoindent自动缩进
set nunu    设置显示行号
set hlsearch设置搜索的关键词高亮
set list 显示所有的不可见字符(空格, tab, 换行符), 用来解决在Linux/Window上出现的对齐问题
set cursorline 在光标所在行下划线
set cursorcolumn显示光标所在列对齐线

基础操作:

vim 常用的模式有: 命令模式 ===>> vim txt 进入或者ESC 之后的状态就是此模式

                                 插入模式====>> 当处于修改文件的状态, 就是此模式

                                 底行模式====>> 进入命令模式后, 键盘输入:在此之后可以输入一些命令

                                  视图模式====>> 在命令模式下, 键盘输入v, 就进入此模式

shift + a == A从命令模式进入插入模式, 并且光标会跳到行尾
shift + i  == I从命令模式进入插入模式, 并且光标会跳到行尾
a从命令模式进入插入模式, 在当前光标位置的下一个字符插入
i从命令模式进入插入模式, 在当前光标位置的下一个字符插入
o从命令模式进入插入模式, 在当前行的下一行插入一行
O从命令模式进入插入模式, 在当前行的上一行插入一行
J将当前行的下一行合并到当前行
K跳转到光标所在函数或命令的man手册
gd跳到局部的变量定义处,不能跨文件
:r hello 将hello文件读入当前文件中
:n1,n2 w>>fox将n1至n2追加到fox文件中
:w fileName文件另存为,当我们编辑了很多却发现当前文件是read only 时候使用
zt当前行跳转为第一行
zb当前行跳转为最后一行
ZZ保存并退出当前编辑文档

 

光标的转移:

小写英文字母 h j k l分别控制光标左 下 上 右移动,也可以使用箭头
 Ctrl+b屏幕往后移动一页
Ctrl+ f屏幕往前移动一页
Ctrl+u屏幕往后移动半页
Ctrl+d屏幕往前移动半页
Shift+g == G移动到文章的最后
Shift+4 == $移动到光标所在行的行尾
Shift+6 == ^移动到光标所在行的行首
0移动到光标所在行的行首
w光标跳到下个字的开头
e光标跳到下个字的字尾
b光标回到上个字的开头
gg进入到文本的开始
Shift+g == G进入到文本的末端
2g=15G 第二行至第15行代码格式化(重置缩进)
zf 100 折叠100 行
zf%把光标放在{或者(位置, 前后都行, 输入zf%, 折叠此块代码
Ctrl + g 显示当前文件名字
]]跳转到函数结尾}
[[跳转到函数开始{

删除操作

  1. x 删除光标所在位置字符
  2. X 删除光标所在位置前一个字符
  3. dw 删除光标所在位置到下一个非字母
  4. D   删除光标所在位置到行末的所有字符
  5. dd 删除当前行

以上操作均可以在在命令前面加数值, 就是把此操作重复N此的意思

复制操作

  1. yy  粘贴当前行

  2. yw 粘贴当前word

以上操作可以在命令前加数字,如10yy, 意为复制10行到粘贴板, 同时此操作需要与p(粘贴)结合使用

     3. 更复杂的非整行的复制粘贴操作:

j键入v 进入视图模式, 用光标转移操作来框选内容, 然后y(复制), 然后移动到目标位置, p 粘贴

 

Vim进阶

1.自动推断  

在Windows 中使用vs/Qt等IDE, 会有自动推断功能, 在vim中也可以有类似的功能:ctrl + p。

Ctrl + p 执行后的形态

键入Ctrl + p 就会出现上图的结构, 可以推断我们自己写的函数, 变量, 也能推断C库的内容, 只要包含了头文件就可以

; 然后可以通过⬆/ctrl +p 逐条向上, 或者⬇/ctrl + n 逐条向下 跳转到自己想要的item

ps: 根据个人的实践, Ctrl + p 的推断并不像Qt那么智能, 只是根据你已经输入的字符, 机械的匹配单词(字符串, 只有数字和字母),对定义的结构体和类的推断, 还是力不从心的。

2. 跳转

在vim的使用中, 我们经常会查找某个函数或者变量, 光标就会到处跳转,比如:

step 1: 光标在100行;

step 2: 光标在300行;

step 3: 光标在500行;

step 4: 光标在50行;

step 5: 光标在250行;

在如上场景中, 我现在到了第五步, 光标处在250行, 如果想回到第四步的位置怎么办呢??

Ctrl + o 闪亮登场, Ctrl + o 组合键可以让光标回到上一个位置;

Ctrl + i  如果希望回到下一个位置, 则用 ctrl + i.

PS: 根据本人的实践, Ctrl + o, Ctrl + i 的光标位置跳转, 不记录j/k的逐行光标移动, 记录的是G/100G/:100/查找/gg  这几类光标跳转

3. 列模式:

在word 的编辑中, 如果我们需要把N行同时输入活删除若干列的内容, 我们可以借助Alt 键的帮助, 在Vim中也可以方便的使用。

同时在N插入:

step 1:将光标移动到您想要插入的第一行第一个字符位置:

step 2:Ctrl + v 进入virtual block 模式

step 3:通过j/k上下移动光标, 至第N行

step 4:shift + i ====I, 输入想要的内容

step 5:按两次ESC 退出插入模式

删除N行M列:

step 1:将光标移动到您想要插入的第一行第一个字符位置:

step 2:Ctrl + v 进入virtual block 模式

step 3:通过h/j/k/l上下左右移动光标, 至第N行M列, 框选出一个NxM的矩阵

step 4:键入x, 完成删除操作

step 5:按两次ESC 退出插入模式

4.录制宏

在实践中, 经常需要重复的操作, 一些简单操作, 我们可以使用sed来搞定, 对于有一定复杂性的操作, 可以考虑用录制宏来完成, 事半功倍,操作步骤如下:

step 1:在命令模式下依次键入qa,此时在左下角有一个 recording 单词;

step 2:此时已经开始录制了, 接下来会记录你的所有的vim动作;

step 3:动作结束,按ESC退出插入模式, 键入a结束录制, 此时一系列的动作已经保存完成,接下来就是执行已经保存了的动作;

step 5:键入@a执行已经保存的动作,也可以用 n@a 来连续执行n次.

5. vimdiff 

在Linux中可以使用vimdiff来查看版本之间的差异:

vimdiff  a.1 a.2       进入vimdiff

]+c(右方括号 + c)    跳转到下一个不同的位置

[+c(左方括号 + c)    跳转到上一个不同的位置

Ctrl + 两次w             光标在对比的文件间切换

d+p                           把光标所在窗口的差异改到另一个窗口(:diffput)

d+o                           把光标所在窗口的差异改为另一个窗口的(:diffget) o=obtain

z+o                             打开光标下面的一个折叠(open)

z+O                             打开光标下面的所有折叠

z+c                              关闭光标下面的一个折叠(close)

z+C                             关闭光标下面的所有折叠

:set noscrollbind          取消文件比较中的同步滚屏功能,此时移动光标, 另一个文件不会跟着上下翻页

:diffupdate                    在对比过程中, 又时候会手动的改变文件的内容, 此时需要更新一下对比的结果

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值