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. 其他
普通编辑
- u恢复之前的编辑,ctrl+r恢复之后的编辑
- 向上翻页:ctrl+b,向下翻页:ctrl+f
- 单词移动
w移动打下一个单词首部,b移动到上一个单词首部
e移动到下一个单词尾部,ge移动到上一个单词尾部
多行编辑(对许多行进行相同的操作)
行前追加
- Ctrl+v(其他方式不行)选中待编辑块
- 按大写I在行前追加(大写A在行尾追加)
- 按ESC
行尾追加
(3 条消息)vim怎样实现多行编辑? - 知乎
说明1:下文中用 XXX 作为占位符,方便接下来查找替换为所需要的参数,例如:30,50 等等。
说明2:光标起始位置为首行首列。
Visual Block
按 ,进入 Visual Block mode,按 G 到末行,按到所有行的行尾,按A在行尾添加,输入添加的内容(只有第一行会显示),按退出编辑。完整命令如下:G A = models.CharField(maxlength=XXX)全局替换
将行尾替换为所需内容。命令如下:: / = models.CharField(maxlength=XXX)Dot (.) 命令
按 A 在第一行行尾添加所需内容,按 退出编辑。然后连续按 j. 依次为每行添加相同内容。命令如下:
A = models.CharField(maxlength=XXX)j.j.j.j.宏
按 qq 开始在 q 寄存器中录制宏,按 A 在第一行行尾添加所需内容,按 退出编辑,并按 j 将光标移到下一行,按 q 退出录制。然后,按 4@q 将宏执行4次。命令如下:
qqA = models.CharField(maxlength=XXX)jq4@q
总结:
似乎只有第一种方法可以算作多行编辑,另外三种方法都只是实现了相同的结果,但不是多行编辑。
选择文字
- 将{}之间的行选中
{处ctrl+v,然后%跳到}处,然后$选中这些行
高亮
- 高亮单词
在单词上按 * - 清除高亮
:nohl
路径跳转
基本用法
- 向后跳转到后几次光标位置
ctrl+o - 向前跳转到前几次光标位置
ctrl+i - 打开文件中的路径
gf
返回打开前的文件位置:Ctrl+o返回光标处或者ctrl+6返回行首 - 跳转到函数定义处
[+ctrl+i
返回:数字键1左边的按键两次或者ctrl+o - 跳转到变量定义处
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文件进行跳转。
快速跳转-标记
需求:在几个程序位置之间进行跳转
- 显示所有标记
:marks - 设置标记
局部标记m+a-z
全局标记m+A-Z
3.跳转
- 跳转到标记处
`(键盘~)标记 - 跳转到标记所在行首
‘(键盘“)标记
替换
替换之前,先进性模式比配检查。正则式会高亮显示,如果正确在进行替换。
例如:/\n每句最后会高亮说明每句最后一个字符是\n。
虽然会高亮每行最后一个字符,但是: /\r123\r/g没有达到效果
:%/\n/\r123\r/g可以成功在每行的下一行添加字符串
gvim 换行符替换 - 我的专栏 - CSDN博客
(3 条消息)Windows 换行符为什么设计成 CR+LF? - 知乎替换某段文字中的固定模式
ctrl+v选中要替换文字,然后敲”:”,然后敲”s/源/目的/g”
正则表达式
- 在线检查工具测试,先看一下该网站的语法规定
- ^匹配行首,.匹配任意字符,*匹配0个或者多个
- 小写\w匹配单个英文字符不是单词
- Vim下空格要如下转义\空格,+要转义\+,()要转义()
- abc空格def空格ghi空格;
- 想要匹配:空格def空格ghi
- 正则语句:\s+\w+或者\s\s*\w\w*。
- 但是vim下+要用\+表示,所以vim下要如下表示/\s\+\w\+。
- 另外:如果\w+换为\w*,那么空格;也被匹配。因为空格后面有0个单词
- 使用\1记忆匹配到的位置的字符可以提取语句信息,起到语言转换的功能
代码自动补全
.vimrc文件内增加语句:set ic//ignorecase检索时忽略大小写
使用字典
- vimrc文件内增加语句
set dictionary+=/usr/share/dict/words - 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技巧: 宏的使用技巧 – 易水博客
- 第一步:录制操作(a表示用户寄存器a-z)
qa - 第二步:进行操作序列
例如gg=G(代码格式化) - 第三步:结束录制
q - 第四步:显示录制的操作
:reg或者”ap(打印寄存器内容) - 第五步:使用录制的操作
@a(按完后,就进行了代码格式化)
窗口
- 移动
Ctrl+w+j或k或h或l三个按键同时按下 - 切换到下一个窗口
Ctrl+w
折叠(移动光标到指定起始代码行,直接输入以下命令即可)
- zf:创建折叠 (可先用shift + v选择多行)
- zd:删除折叠
- zo:打开折叠
- zc:关闭折叠
- zR:打开所有折叠
- zM:关闭所有折叠
vim中使用shell
- 方法一:vim内部临时调用一条shell命令:! shell cmd
返回:空格或者回车 - 方法二:vim进入shell
ctrl+z
返回:shell内输入fg或者suspend
异常:有时按fg回不去,这时要fg 标号。
查看标号方法 - 方法三::shell(:sh)创建一个新的shell
返回:shell内输入exit,关闭新创建的shell
VIM和shell的切换 - yeyelei
不同位置之间的文字复制
- 将文件中的某个字符串复制到:模式中
先用鼠标选中该字符串,右键复制粘贴到:模式输入框中 - 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
其他
- 显示历史记录
先敲Shift :,然后上下键选择 - 刷新文档
:e - 格式化代码gg=G
- 查找某个命令的帮助文档
:h i_ctr+n//i表示插入模式下的ctr+n快捷键,敲ctrl时按tab补全
- VIM使用教程
- vi / vim使用教程
- vim 使用教程详解
- vim使用教程
- vim使用教程
- VIM使用教程
- vim使用教程
- vim使用教程
- vim使用教程
- vim的使用教程
- vim简单使用教程
- VIM 使用教程
- Vim使用教程
- vim使用教程
- vim 使用教程
- VIM使用教程
- Vim 使用教程
- vim使用简明教程
- Redis Jedis 之 JedisSentinelPool 源码分析
- 实用VPC虚拟私有云设计原则
- Java读取Excel文件
- Java写入Excel文件
- 成为程序员ing日记
- vim使用教程
- 在内存中float数是如何转化为int数的zhang_he_xiang的博客CSDN
- CSSbackground的详细使用
- 使用@Order调整配置类加载顺序
- Java文件上传
- Spring MVC文件上传
- 数据结构-二路归并-练习题1
- (一)安卓框架搭建之项目分层、主题、gradle基本配置
- 计蒜客 字符串长度