vim的常见操作

来源

https://www.imooc.com/learn/1129  一位大佬的免费课程,大家可以去看下.这是我做的一些笔记,用来在忘记一些操作时查询,排版可能存在一些问题,大家将就看吧.

下载与安装:

win下可以下载Gvim

进入vim

vim命令进入vim   

vim不同模式下的操作:

  • 普通模式(用vim打开文件时的默认模式)

       水平移动:
       		h(左)j(下)k(上)l(右)移动光标
       		数字0移动到当前行的第一个字符处,'^'跳转到第一个非空白字符处
       		'$'移动到行尾,g_移动到行尾的非空白字符处                                    
       
       垂直移动:
       		'(' 和 ')' 在句子间移动
       		'{' 和 '}' 在段落间移动
       		可以使用 :help 来查看帮助文档
    
       删除:
       		x 快速删除一个字符
       		daw 删除一个单词,会删除跟在单词后面的空格
       		diw 删除一个单词,但不会删除跟在单词后面的空格
       		dd 删除当前行
       		dt + 字符 删除当前位置到指定字符之间的内容,包括当前位置,不包括指定字符
       		d$ 删除当前位置到行尾的字符,包括当前位置
       		d0 删除当前位置到行首的字符,不包括当前位置
       		x 和 d 都可配合数字或可视模式使用(x是删除字符,d是删除行)
       修改:
       		r 将当前光标所在位置的字符替换为之后输入的字符
       		R 不断替换当前位置即之后的文本,类似于键盘上 ins 的作用,覆盖,可按 esc 退出该状态
       		s 删除当前光标所在位置的字符并进入插入模式,光标位置即为删除字符的位置
       		S 整行删除并进入插入模式 
       		caw 删除当前单词,并进入插入模式
       		C 删除当前光标及之后的内容,并进入插入模式
       		Ct + 字符 删除当前位置到指定字符之间的内容,包括当前位置,不包括指定字符并进入插入模式
       		也可配合数字进行操作
    
       复制粘贴:
       		复制:y
       		粘贴:p
       		剪切:d
       		配合可视模式,选中要复制的内容后使用y复制,p粘贴
       		配合文本对象使用,例如tiw复制一个单词,yy复制一行
       寄存器的使用:
       		vim里操作的是寄存器而不是系统的剪切板
       		默认使用了d删除或者y复制的内容都放到了“无名寄存器”
           	小技巧:使用x删除字符放到无名寄存器中,然后用p粘贴,可以替换两个字符的位置
           	vim不使用单一剪切板进行剪贴,复制与粘贴,而是使用多组寄存器{
               通过"{register}"前缀可以指定寄存器,即"+寄存器名称+操作,不指定默认使用无名寄存器,其中" + 寄存器名称 为引用某寄存器
               使用" 寄存器名称 + 操作 可以完成将某寄存器的内容进行复制的操作,例如"bp
               可以使用 reg + 寄存器名称 来查询寄存器中存有哪些内容
               除了有名的寄存器‘a-z’,vim还有一些其他常见寄存器{
                   复制专用寄存器 "0 ,使用y复制文本同时会被拷贝到寄存器0
                   系统剪贴板 "+ ,可以在复制前加上"+ 复制到系统剪贴板
                   其他一切寄存器比如 "%当前文件名,".上次插入的文本
               }
           }
       宏:
       		宏可以看成是一系列命令和集合
       		我们可以用宏“录制”一系列操作,然后“回放”
       		宏可以非常发便地把一系列命令用在多行文本上
       		使用:{
           		q 键开始“录制”,同时q 键结束“录制”
           		保存的命令依旧放到了寄存器里面
           		可以使用q{register}选择要保存的寄存器,把录制的命令放进里面,qa:使用寄存器a
           		使用@{register}回放寄存器中保存的一系列命令
           		例如:qa + 一系列操作,将一系列操作保存在a中
           		可视化全选,前面的< ** > 之类的不用管,在后面用normal + 空格 + @a,在所有行回放a中保存的操作
       }
       搜索:
       		/ 前向搜索
       		? 反向搜索
       		n 跳转到上一个匹配
       		N 跳转到下一个匹配
       		* 当前单词的前向匹配
       		# 当前单词的后向匹配 
    
       替换:
       		substitute 命令准许我们查找并替换文本,并且支持正则式
       		举例:{
           		:[range]s[ubstitute]/{pattern}/{string}/[flags]
           		range 表示范围,比如 10,20 表示10-20行,%表示全部
           		s 表示替换
           		pattern 表示要替换的模式,string 表示替换后的文本
               
           		flags 的几个常用标志
               		g 表示全局范围内执行
               		c 表示确认,可以确认或拒绝修改
               		n 报告匹配到的次数而不替换,可以用来查询匹配次数
           			举例:
          					:% s/temp/temp1/g 将全局的temo替换为temp1
           				:% s/\<temp\>/temp1/g 将完整的单词temp替换,而不替换某些单词中的temp(正则)
       }
    
       	gg 移动到文档开头
       	G 移动到文档结尾
       	H 快速移动到文档的开头
       	M 快速移动到文档的中间
       	L 快速移动到文档的结尾
       	ctrl + u 向上翻页
       	ctrl + f 向下翻页
       	zz 把光标所在行放在屏幕的中间
       	zt 把光标所在行放在屏幕的顶部
       	zb 把光标所在行放在屏幕的底部
       	ctrl + o (字母o)快速返回
       	m 标记,例如 mx ,之后可以用 `x 来跳转到标记位置
    
       	gi 快速跳转到最后一次编辑的位置并插入(但是我这里用nvim并没有成功并报了一个错误,没有找到程序啥啥的= =)
    
       	w/W 移动到下一个单词开头
       	e/E 移动到下一个单词结尾
       	b/B 移动到上一个单词开头
       (小写的字母的单词表示以非空白字符分割的单词,大写字母表示以空白字符分割的单词)
    
       行间搜索:
       		使用f可以移动到字符上,t移动小下一个字符{
           	用法: f + 要搜索的字符
           	t 的用法与f的用法相同,但是跳转到要搜索的字符的前一个字符处
           	F 搜索前面的字符,用法与f,t相同
           	T 搜索前面的字符,跳转到前一个字符的后一个字符处
           	有多个相同的字符时,可以使用';'跳转到下一个正在搜索的字符,','跳转到上一个正在搜索的字符
       }
    
       :w 保存
       :q 退出
       :wq 保存并退出
    
  • 插入模式(可以用a,i,o,A,I,O进入,可以用esc从插入模式退回到普通模式)

      i,a,o进入编辑模式
      i在当前光标所在字符的前面插入  
      a在当前光标所在字符的后面插入
      o在当前光标所在行的下一行插入(新建一行插入)
    
      I,A,O进入编辑模式
      I在当前光标所在行的最前面插入 
      A在当前光标所在行的尾部插入
      O在当前光标所在行的上一行插入(新建一行插入)
    
      ctrl + h 删除上一个字符
      ctrl + w 删除上一个单词
      ctrl + u 删除当前行(第一次按下时光标移动到当前行起始位置,第二次按下时,光标到达上一行的末尾处,即彻底删除一行)
      esc退出插入{
      	替代方案:
          	ctrl + c (可能中断某些插件)
          	ctrl + [
    

    }

  • cmd命令模式

  • 可视化模式(v)

      v进入选择模式
      V选择行并进入选择模式
      ctrl + v 进入方块选择,即可以多行,多列,不一定非要是一整行
    
  • vim多文件操作:

      buffer 缓冲区:
      	:e + 文件名 打开一个文件,e表示当前路径
      	:ls 列举缓冲区
      	:b n 跳转到第n个缓冲区
      	:bpre 跳转到上一个
      	:bnext 跳转到下一个
      	:bfirst 跳转到第一个
      	:blast 跳转到最后一个
      	:b + buffer_name(buffer的名字)可以用table补全跳转
      windows 窗口:
      	可以在不同的窗口打开不同的buffer,编辑相同的buffer会使其余的窗口显示的内容同步变化
      	ctrl + win + s 或 :vs 竖分屏
      	ctrl + win + v 或 :sp 横分屏
      	ctrl + win + w 在窗口间循环切换
      	ctrl + win + h 切换到左边的窗口
      	ctrl + win + j 切换到下边的窗口
      	ctrl + win + k 切换到上边的窗口
      	ctrl + win + l 切换到右边的窗口
      	ctrl + win + '=' 使所有的窗口等宽等高
      	ctrl + win + '_' 最大化活动窗口的高度
      	ctrl + win + '|' 最大化活动窗口的宽度
      tab(标签页)将窗口分组:
      	:tabnew 新建一个标签页,可以在新建时打开另一个文件
      	:tabe[dit] {filename} 在新标签页中打开{filename}
      	ctrl + win + T 把当前窗口移动到一个新的标签页
      	:tabc[lose] 关闭当前标签页及其中的所有窗口
      	:tabo[nly] 只保留活动标签页,关闭所有其他标签页
      	:tabn[ext] {N} 或 {N}gt 切换到编号为N的标签页
      	:tabn[ext] 或 gt 切换到下一个标签页
      	:tabn[revious] 或 gT 切换到上一个标签页
      vim 的 text object(文本对象)
      	[number]<command>[text object]
      	number 表示操作次数 command 表示命令(例如,d,c,y等)text objext 表示文本对象(例如,单词w,句子s,段落p)
      成对字符间的操作:
      	vi + 符号 ,选中成对特定符号间的内容
      	ci + 符号 ,删除成对的特定符号间的内容并进入插入模式
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值