vim使用教程

来源:互联网 发布:用java打印菱形思路 编辑:程序博客网 时间:2024/06/03 19:13

目录

  • 1. 普通编辑
  • 2. 多行编辑(对许多行进行相同的操作)
    • 2.1. 行前追加
    • 2.2. 行尾追加
  • 3. 选择文字
  • 4. 高亮
  • 5. 路径跳转
    • 5.1. 基本用法
    • 5.2. gf路径跳转与编译时搜索文件的路径的区别
  • 6. 快速跳转-标记
  • 7. 替换
  • 8. 正则表达式
  • 9. 代码自动补全
    • 9.1. 使用字典
    • 9.2. 路径补全
    • 9.3. 匹配已经插入的字符串
    • 9.4. 补全一行
    • 9.5. 万能补全功能
  • 10. 寄存器
    • 10.1. 显示寄存器信息:reg
    • 10.2. 向寄存器存储数据
    • 10.3. 打印寄存中的数据
    • 10.4. 寄存器数据生存周期
    • 10.5. 清空某个寄存器
    • 10.6. 从寄存器列表中删除某个寄存器
    • 10.7. 从寄存器列表中删除所有寄存器
    • 10.8. 寄存器类型及使用
      • 10.8.1. 默认寄存器(Unamed Register) “”
      • 10.8.2. 数字寄存器(Numbered Register) “0 至 “9。存储删除的行
      • 10.8.3. 短删除寄存器(Small Delete Register) “-
      • 10.8.4. 命名寄存器(Named Register) “a 至 “z,”A 至 “Z
      • 10.8.5. 只读寄存器(Read-only Register)
      • 10.8.6. 黑洞寄存器(Black Hole Register) “_
      • 10.8.7. 选择和拖拽寄存器(Selection and Drop Register) “* “+ “~
      • 10.8.8. 搜索模式寄存器(Search Pattern Register) “/
      • 10.8.9. 表达式寄存器(Expression Register) “=
  • 11. 宏
    • 11.1. 功能
    • 11.2. 方法
  • 12. 窗口
  • 13. 折叠(移动光标到指定起始代码行,直接输入以下命令即可)
  • 14. vim中使用shell
  • 15. 不同位置之间的文字复制
  • 16. vim配置文件
    • 16.1. 修改配置文件注意
    • 16.2. 显示行号
    • 16.3. vim设置折叠
    • 16.4. 设置自动保存上次折叠
    • 16.5. 配置文件关闭打开文件时折叠所有
    • 16.6. Tab建代替ctr+x/n/p补全插件
  • 17. 其他

普通编辑

  1. u恢复之前的编辑,ctrl+r恢复之后的编辑
  2. 向上翻页:ctrl+b,向下翻页:ctrl+f
  3. 单词移动
    w移动打下一个单词首部,b移动到上一个单词首部
    e移动到下一个单词尾部,ge移动到上一个单词尾部

多行编辑(对许多行进行相同的操作)

行前追加

  1. Ctrl+v(其他方式不行)选中待编辑块
  2. 按大写I在行前追加(大写A在行尾追加)
  3. 按ESC

行尾追加

(3 条消息)vim怎样实现多行编辑? - 知乎
说明1:下文中用 XXX 作为占位符,方便接下来查找替换为所需要的参数,例如:30,50 等等。
说明2:光标起始位置为首行首列。

  1. Visual Block
    按 ,进入 Visual Block mode,按 G 到末行,按 A退GA = models.CharField(maxlength=XXX)

  2. 全局替换
    将行尾 :/ = models.CharField(maxlength=XXX)

  3. Dot (.) 命令
    按 A 在第一行行尾添加所需内容,按 退出编辑。然后连续按 j. 依次为每行添加相同内容。命令如下:
    A = models.CharField(maxlength=XXX)j.j.j.j.


  4. 按 qq 开始在 q 寄存器中录制宏,按 A 在第一行行尾添加所需内容,按 退出编辑,并按 j 将光标移到下一行,按 q 退出录制。然后,按 4@q 将宏执行4次。命令如下:
    qqA = models.CharField(maxlength=XXX)jq4@q

总结:
似乎只有第一种方法可以算作多行编辑,另外三种方法都只是实现了相同的结果,但不是多行编辑。

选择文字

  1. 将{}之间的行选中

{处ctrl+v,然后%跳到}处,然后$选中这些行

高亮

  1. 高亮单词
    在单词上按 *
  2. 清除高亮
    :nohl

路径跳转

基本用法

  1. 向后跳转到后几次光标位置
    ctrl+o
  2. 向前跳转到前几次光标位置
    ctrl+i
  3. 打开文件中的路径
    gf
    返回打开前的文件位置:Ctrl+o返回光标处或者ctrl+6返回行首
  4. 跳转到函数定义处
    [+ctrl+i
    返回:数字键1左边的按键两次或者ctrl+o
  5. 跳转到变量定义处
    qd

gf路径跳转与编译时搜索文件的路径的区别

文件夹m下有文件夹a和文件夹b,
文件夹a下有文件:
1.c 2.h 3.h
文件夹b下有文件:
4.h
文件1.c内内容如下:
\#include”2.h”//gf可以跳转到,编译不报错
\#include”b/4.h”//gf不可以跳转到(改为../b/4.h或者将b的路径添加进vim的path可以gf到),编译不报错

结论:gf命令根据相对与该文件的路径进行跳转,gf只能进行简单的跳转。编译根据makefile文件进行跳转。

快速跳转-标记

需求:在几个程序位置之间进行跳转

  1. 显示所有标记
    :marks
  2. 设置标记
    局部标记m+a-z
    全局标记m+A-Z

3.跳转

  • 跳转到标记处
    `(键盘~)标记
  • 跳转到标记所在行首
    ‘(键盘“)标记

替换

  1. 替换之前,先进性模式比配检查。正则式会高亮显示,如果正确在进行替换。
    例如:/\n每句最后会高亮说明每句最后一个字符是\n。
    虽然:/\r123\r/g没有达到效果
    :%/\n/\r123\r/g可以成功在每行的下一行添加字符串
    gvim 换行符替换 - 我的专栏 - CSDN博客
    (3 条消息)Windows 换行符为什么设计成 CR+LF? - 知乎

  2. 替换某段文字中的固定模式
    ctrl+v选中要替换文字,然后敲”:”,然后敲”s/源/目的/g”

正则表达式

  1. 在线检查工具测试,先看一下该网站的语法规定
  2. ^匹配行首,.匹配任意字符,*匹配0个或者多个
  3. 小写\w匹配单个英文字符不是单词
  4. Vim下空格要如下转义\空格,+要转义\+,()要转义()
  5. abc空格def空格ghi空格;
  6. 想要匹配:空格def空格ghi
  7. 正则语句:\s+\w+或者\s\s*\w\w*。
  8. 但是vim下+要用\+表示,所以vim下要如下表示/\s\+\w\+。
  9. 另外:如果\w+换为\w*,那么空格;也被匹配。因为空格后面有0个单词
  10. 使用\1记忆匹配到的位置的字符可以提取语句信息,起到语言转换的功能

代码自动补全

.vimrc文件内增加语句:set ic//ignorecase检索时忽略大小写

使用字典

  1. vimrc文件内增加语句
    set dictionary+=/usr/share/dict/words
  2. vim内
    :set spell//进行拼写检查
    :set nospell//关闭拼写检查

路径补全

插入模式下ctr+x+f

匹配已经插入的字符串

ctr+p//匹配上文出现
ctr+n//匹配下文出现

补全一行

ctr+x+l

万能补全功能

.vimrc文件中加入
filetype plugin on
vim中
ctr+x+o

寄存器

显示寄存器信息:reg

向寄存器存储数据

“寄存器名字 normal下的命令(命令操作的结果保存到寄存器中,注意不是”寄存器名 +要保存的数据!!!)
“ayy命令会将yy命令的结果放入寄存器a中,也就是复制该行文本到寄存器a中

打印寄存中的数据

“ap命令则表示粘贴寄存器a中的内容

寄存器数据生存周期

挂起/重启寄存器后寄存器中的值仍然存在

清空某个寄存器

qaq或者:let @a=””

从寄存器列表中删除某个寄存器

How to clear vim registers effectively? - Stack Overflow
从该链接得知要将.viminfo文件中的待删除寄存器所在行删除
vim - Clear certain criteria from .viminfo file - Stack Overflow
从该链接得知要删除.viminfo中信息,要先输入:set viminfo=
然后删除寄存器所在行,保存,寄存器就从寄存器列表中删除了

从寄存器列表中删除所有寄存器

:set viminfo=’1000,<0
关闭重新打开vim,所有寄存器清空,但是新建寄存器还能被保存到寄存器列表中。
Vim documentation: usr_21

寄存器类型及使用

http://yejinxin.github.io/vim-register-usage/
Vim中的寄存器(register)作用和windows中的剪贴板类似,不过Vim中的寄存器不止一个,有不同的类别,有不同的用处。
例如,”ayy命令会将yy命令的结果放入寄存器a中,也就是复制该行文本到寄存器a中。然后”ap命令则表示粘贴寄存器a中的内容。
具体而言,Vim中常用的寄存器包括:

默认寄存器(Unamed Register) “”

又称无名寄存器,当使用y、d、c、s、x命令时,对应的文本将自动放入该寄存器。即使在复制或删除文本时,已经显示地指定了别的寄存器(例如”ayy命令),这些文本仍然会同时放入无名寄存器。

数字寄存器(Numbered Register) “0 至 “9。存储删除的行

o 寄存器”0默认存放最近复制的文本。
o 寄存器”1默认存放最近删除的文本,除非删除内容少于一行。
o 寄存器”2默认存放倒数第二次删除的文本,除非删除内容少于一行。
o 寄存器”3到”9依次类推。
寄存器”0的一个用处是当你想拷贝A替换B的时候。如果直接yw拷贝A,然后dw删除B,再粘贴p的话,是不行的,因为删除命令也会把删除的文本放到默认寄存器中。此时,可以就使用”0p命令来粘贴刚才复制的文本了。

短删除寄存器(Small Delete Register) “-

当删除少于一行的文本时,这些文本默认将存放于此。

命名寄存器(Named Register) “a 至 “z,”A 至 “Z

也称字母寄存器,这些寄存器不会自动填充,是提供给用户使用的。注意,大小写是一一对应的,小写的表示替换原寄存器的内容,而大写的则表示追加到原寄存器内容中。

只读寄存器(Read-only Register)

有4个寄存器是只读的,你只能读这些寄存器,不能写这些寄存器。
o “%包含当前文件名;
o “#包含交替文件名;
o “.包含最近插入的文本;
o “:包含上次执行的命令行;

黑洞寄存器(Black Hole Register) “_

类似于linux中的/dev/null的作用,任何放入该寄存器中的文本都将丢弃。黑洞寄存器也可以用于解决上文提到的“复制、删除、粘贴问题”,在删除的时候使用”_d命令将删除的文本扔至黑洞即可,这样删除后p就不会黏贴删除的内容。

选择和拖拽寄存器(Selection and Drop Register) “* “+ “~

“*寄存器用户访问系统剪贴板,在windows下和”+寄存器相同;
在Linux下,”+寄存器包含选中的文本,而”*寄存器包含复制的文本;
而”~寄存器包含从其它应用程序拖拽到Vim中的文本。
使用”*寄存器和”+寄存器,我们就可以方便的在Vim和外部应用程序中复制粘贴了(在一个vim中选中一段代码,在另一个vim中就可以使用:reg查看”*寄存器内容是否是选中的那段代码,打印”*寄存器即将一个vim中的内容复制到另一个vim中)。我们还可以设置set clipboard=unamed或set clipboard=unamedplus使得所有拷贝删除操作都直接使用系统剪贴板,更加方便。
需要注意的是,如果执行:echo has(‘clipboard’)返回0,表示当前Vim版本不支持访问系统剪贴板,需要重新编译或更换版本,这一般需要系统有GUI的安装。

搜索模式寄存器(Search Pattern Register) “/

“/寄存器包含上次文本搜索的命令。

表达式寄存器(Expression Register) “=

输入”=命令后,Vim底部会出现一个以”=”开头的提示行,可以在这里输入表达式例如5*27,按回车确认后,即可使用p粘贴表达式的取值。
另外,输入的表达式不仅可以包含通常的算术运算符,还可以使用Vim特定的函数和运算符等,例如”=$PATH得到环境变量PATH的值。
使用:register或:reg命令可以查看当前已定义的所有寄存器的值。使用:help registers命令可以查看相关帮助。

功能

将用户操作(操作序列)存入寄存器,要重复改操作使用@字符(@寄存器名)。寄存器中的存储操作”ayy只能保存操作影响的数据,不能保存操作!!!

方法

vi技巧: 宏的使用技巧 – 易水博客

  1. 第一步:录制操作(a表示用户寄存器a-z)
    qa
  2. 第二步:进行操作序列
    例如gg=G(代码格式化)
  3. 第三步:结束录制
    q
  4. 第四步:显示录制的操作
    :reg或者”ap(打印寄存器内容)
  5. 第五步:使用录制的操作
    @a(按完后,就进行了代码格式化)

窗口

  1. 移动
    Ctrl+w+j或k或h或l三个按键同时按下
  2. 切换到下一个窗口
    Ctrl+w

折叠(移动光标到指定起始代码行,直接输入以下命令即可)

  1. zf:创建折叠 (可先用shift + v选择多行)
  2. zd:删除折叠
  3. zo:打开折叠
  4. zc:关闭折叠
  5. zR:打开所有折叠
  6. zM:关闭所有折叠

vim中使用shell

  1. 方法一:vim内部临时调用一条shell命令:! shell cmd
    返回:空格或者回车
  2. 方法二:vim进入shell
    ctrl+z
    返回:shell内输入fg或者suspend
    异常:有时按fg回不去,这时要fg 标号。
    查看标号方法
  3. 方法三::shell(:sh)创建一个新的shell
    返回:shell内输入exit,关闭新创建的shell
    VIM和shell的切换 - yeyelei

不同位置之间的文字复制

  1. 将文件中的某个字符串复制到:模式中
    先用鼠标选中该字符串,右键复制粘贴到:模式输入框中
  2. vim下,选中一段字符就表示已经复制,要粘贴只需按鼠标中间的键
    例如:在多行前面补充路径。
    路径前缀已经选中复制到剪贴板,如果此时ctrl+v选中abc.v后按I,然后选中路径,在光标处按鼠标中键是不会将路径复制到abc前面的。解决:先选中路径,再按鼠标中键

vim配置文件

修改配置文件注意

set xxxx//set前面不能有空格

显示行号

方法一:在命令行模式下输入 ” : set nu ”
方法二:修改配置文件

vim设置折叠

设置自动保存上次折叠

在.vimrc文件中添加如下命令,配置自动保存折叠状态:
au BufWinLeave * silent mkview
au BufWinEnter * silent loadview

遇到的问题:如果使用:mkview命令保存view失败,
vim显示如下错误:
Error: detected while processing BufwinLeave Auto commands for “*”
E739: cannot create directory: home/student1.vim/view
E190: cannot open “/home/student1/.vim/view/~=+zcl=+matrix.cu=” for writing

则在用户根目录下创建目录:mkdir -p .vim/view即可。

配置文件关闭打开文件时折叠所有

set foldenable
set foldmethod=syntax
set foldcolumn=0
setlocal foldlevel=1

Tab建代替ctr+x/n/p补全插件

SuperTab - Do all your insert-mode completion with Tab. : vim online

其他

  1. 显示历史记录
    先敲Shift :,然后上下键选择
  2. 刷新文档
    :e
  3. 格式化代码gg=G
  4. 查找某个命令的帮助文档
    :h i_ctr+n//i表示插入模式下的ctr+n快捷键,敲ctrl时按tab补全
原创粉丝点击