VIM 操作记录

@(linux 编程)[vim, 技能, VIM, 开发技能, 工具使用]

使用vim 大概有2年,但是感觉一直停留在刚入门。这几天幡然醒悟自己的开发环境和开发技能如此落后,可恨的是还停滞不前许久,因此决定发愤图强,改变他。 --- lcd vim 神之编辑器 哈哈哈

本文记录, vim 入门后使用进阶


说明 :

命令格式 xxx表示在Nornal 模式下键盘直接输入 命令格式 : xxx表示在命令行模式下输入 命令格式 C_x表示键盘 ctrl + x

日常操作

个人感觉满足90%的需求

Nornal 模式 下光标快速移动

操作

效果

0

到行首

^

到本行第一个非空位置

$

到行尾

g_

到本行最后一个非空位置

*

当前单词下一个位置 (n向下继续查找)

#

当前单词上一个位置 (N向上继续查找)

%

移动到当前括号匹配的位置

:/xxx

向下查找xxx 词(?向上查找)

NG

到第N行

gg

到第一行

G

到最后一个行

' ’ (两个单引号)

上一个位置

w

按单词跳动 , W (按blank划分跳动)

e

单词尾 , E (按blank划分跳动)

fx

到当前行下一个为x的字符

tx

到当前行 x 前的一个字符

进入Insert 模式 快速开始输入

操作

效果

i

在光标前面插入

I

行首非空字符前插入

a

在光标后面插入

A

行末非空字符后插入

o

在下一行首插入

O

在上一行首插入

cw

删除当前单词,进入插入模式

拷贝黏贴那几个命令

操作

效果

p

黏贴

yy

复制当前行

yw

复制光标到单词结束

y^

复制光标到最前一个非空字符

y$

复制光标到最后一个非空字符

2yy

复制当前行开始的2行

2y

复制当前行和后续2行

其他组合操作类似

操作撤销和恢复

  • u 撤销操作
  • C_r 恢复操作

文件打开保存退出切换

操作

效果

: e xx

打开文件

: saveas xx

另存为

: E

查看目录

: ls

查看缓冲区,打开的文件

: buffer x

: ls 后可以直接打开对应的文件 编号x

: bn/ : bp

vim xx xx 多个文件的时候,切换

操作的快速重复

  • 快速重复操作 : 小数点 .
  • N[cmd] : 执行 cmd N 次(p, dd, x..)

区域选择

选择指定符号 (", ', ), }, ]) 区域内的内容 举个例子 : [ a + cda [daff ] ], 当前光标在 [daff] 范围

操作

选中

v i ]

[ a + cda [daff] ]

v a ]

[ a + cda [daff ] ] (包括符号)

v 2i ]

[ a + cda [daff]]

v 2a ]

[ a + cda [daff ]]

** 数字 表示向外第几层,默认1,当前层**

块操作

C_v 进入块操作-- 局部。

  • 整块注释
void fun(void)
{
    printf("fun %s", __FUN__);
}
        
//void fun(void)
//{
//printf("fun %s", __FUN__);
//}

光标定位void 位前,按 C_v, 然后光标向下拖动(hjkl..),选择注释范围,大写I进入插入模式,输入//, ESC退出,所有行都会被注释。

  • 整块缩进 同上,选中块列首, C_> 或者 C_< 进行缩进(选中后输入数字可以设定缩进个数) V/v 块操作— 整行选择 键盘v, 选中操作的块区域。
    • = : 代码自动缩进(多层次)
    • J : 选中区域连接为一行

宏录制

st=>start: qa : q开始记录,a是保存的寄存器
end=>end: end
op=>operation: 一系列操作, 诸如yy,ddd
opq=>operation: q : 停止记录
opu=>operation: @a : 调用录制的宏 
opu2=>operation: @@ 调用最近录制的宏
opu3=>operation: 3@a 执行a中保存的宏3次
st->op->opq->opu->opu2->opu3->end

分屏操作

  • 终端打开命令
$vim -On file file2 #大写O垂直分屏打开文件
$vim -on file file2 #小写水平打开
# n 表示分屏数,直接n等于文件个数, 如果n小于文件,按顺序打开前面的n个,如果大于,打开空编辑页面
  • 分屏快捷操作 C_w + hjkl 或者方向键移动光标 C_w + HJKL 移动分屏 (太多分频使用容易混乱) C_w + c 关闭当前分屏 C_w + q 关闭当前分屏,如果最后一个,退出vim
  • 编辑器命令行分屏设置 : :split / :vsplit + 文件
  • 打开分屏后,可以设置同步滚动 : :set scb
  • 关闭同步滚动 : :set noscb

标签定位

  • 打标签 光标移动到需要标记的位置, 键盘 mx (x 代表 26 个字母,指代存储位置)*
  • 跳到标签位置 键盘 ````x ``` (`是tab上的那个点)* :marks 得知目前所有标签的列表。
  • 标签作用域 小写字母,作用当前文档 大写字母,作用编辑的各个文档之间 (同一个buffer) 数字,可作用前面十次编辑的文档之间。

数字的用法比较特殊,'0 是回到前一次编辑文档中离开前的最后位置,'1 则是回到前第二次编辑文档最后离开的位置,依此类推。该功能是vim自动标记,請 :h viminfo-file-marks。viminfo 關掉,就沒這個功能了! 所谓前次指的是前次启动的 vim。


没插件也能IDE ? --- 可以可以

分屏浏览目录打开

操作

效果

:He

在下面分屏打开目录 (:He!在上面))

:Ve

在左边分屏打开目录 (:Ve!在右边)

1465059837288.png

Tab 分页浏览目录打开

操作

效果

:Te

在新页打开目录

:tabs

查看打开的情况

gt

跳到下一页 (T上一页)

x gt

直接跳到指定页 i

:tabclose i

关闭i 页,没指定关闭当前

:bufdo tab split

把buffer中的文件全部转为tab

vim启动直接以页的形式打开文件

vim -p xx.c aa.c 

1465059909964.png

保存打开几个tab 或者设置各种参数的会话

操作

效果

: mksession path_name.vim

保存当前建立的会话窗口

vim -S path_name.vim

打开保存的会话

: qa / : wqa

退出当前会

关键字补全快捷键

以下,在Insert 模式进行操作

单词补全

输入单词一部分后,C_n, 自动补全一个。如果这个补全对象不对,C_p,回退补全,方向键选择实际需要的选项。

其他补全

C_X 的前提下, 如下快捷键对应功能 :

输入

功能

C_D

宏定义补全

C_L

行补全

C_F

文件名补全(补全目录下文件的名称)

C_I

关键字补全

C_V

表达式补全

C_]

Tag 补全

1465060071930.png

quickfix 功能

编译出错调试

当前目录下包含makefile , 在vim 命令中执行:make,如果编译出现错误,执行结束后回车,在命令行中执行: cw打开窗口查看信息。: cl 可以直接列出所有错误信息; : cp跳到上一个错误, : cn跳到下一个错误。

信息查找

在vim 下查找 XXX 宏在哪里出现,命令行下输入 :

: grep -r --include="*.[ch]" XXX  ./

命令递归查找当前目录下的 *.c 和 *.h 文件中包含XXX宏。查找后,通过命令 :cw 查看。

快速打开光标所指文件

  • Normal 模式下, 键盘gf
  • 退回, C_o
  • 打开文件存在buffer中,参看buffer使用。

其他加速操作

操作

效果

dtx

删除内容直到遇到x

ga

查看光标处的ASSII码

g8

查看光标处的UTF-8码

guu(Vu)

当前行全部变为小写

gUU(VU)

当前行全部变为大写

:r ![cmd]

执行shell 命令并把结果黏贴到文本

  • 写一段python代码,选中后,执行 : !python,结果黏贴在文本,替换了源代码

参考

酷壳--简明 Vim 练级攻略 无插件Vim编程技巧 大家来学vim

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

利用MingW检验程序运行内存

今天zhx老师在讲课的时候提到了一种检验程序内存的方法 一般计算内存的方法就是手算,手动计算代码中每个变量所占的内存然后加起来 具体可以参考这篇文章 zhx老师...

29060
来自专栏linux驱动个人学习

动态链接

要解决空间浪费和更新困难这两个问题最简单的办法就是把程序的模块相互分割开来,形成独立的文件,而不再将它们静态地链接在一起。简单地讲,就是不对那些组成程序的目标文...

22820
来自专栏python学习指南

python_IO编程

本篇文章将介绍python里面的I/O编程。更多内容请参考:python学习指南 I/O编程 读写文件时最常见的IO操作。Python内置了读写文件的函数...

24560
来自专栏用户2442861的专栏

linux split join paste uniq tee sort 工作中文本操作常用方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details...

12610
来自专栏流柯技术学院

Jmeter常用函数之__CSVRead使用

__CSVRead函数用于对脚本进行参数话,当脚本中不同变量需要不同参数值时,可以考虑__CSVRead函数。 以登录的用户名、密码为例:实际进行压力测试时,...

12610
来自专栏Python私房菜

60行Python代码,实现多线程PDF转Word

工作中经常会遇到需要提取PDF文件中文字的情况,一个PDF还好,复制粘贴一下也花不了太多时间,如果需要把大量PDF转为Word,怎么办呢?

18130
来自专栏木头编程 - moTzxx

PHP 无限级分类数据库设计及实现

53320
来自专栏大数据杂谈

非常实用的九个程序员工具网站

25440
来自专栏Petrichor的专栏

tensorflow编程: Running Graphs

  A class for running TensorFlow operations.   这是一个类,执行 tensorflow 中的 op 。它里面定...

18320
来自专栏陈纪庚

SPA页面初试

11420

扫码关注云+社区

领取腾讯云代金券