linux vim 常用操作

vim

功能:

命令行模式下的文本编辑器
根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能
使用方式:vim filename
打开一个名为 vim filename 的文件。

如果没有该文件,则打开个一个新的文件,并命名为filename

模式:

normal 模式

ESC从插入模式回到普通模式

普通模式下进行各种命令操作和移动

大部分情况下,使用的是浏览

normal移动的快捷方式

hjkl 左下上右

w/W: 移动到下一个word/WORD 开头

e/E: 移动到下一个 word/WORD 结尾

b/B: 移动到上一个 word/WORD 开头 (backword)

行间搜索移动

f{char}: 当前光标往行后搜索字符, 分号(;)下一个找到的字符,逗号(,)上一个找到的字符

F{char}: 当前光标往前搜索字符

0: 移动到行首第一个字符

^: 移动到第一个非空白字符

$: 移动到行尾

G: 移动到行尾非空白字符

页面移动

gg: 文件开头

G: 文件结尾

H: 屏幕的开头(Head)

M: 屏幕的中间(Middle)

L: 屏幕的结尾(Lower)

crtl+u: 上翻页(upword)

ctrl+f: 下翻页(forword)

zz: 屏幕置为中间

:n 或 nG:n为数字,光标移动到第n行

n[HTML_REMOVED]:n为数字,光标向下移动n行

快速增删改查

vim快速增加

a/i/o A/I/O

vim快速删除

x 快速删除一个字符

d可以配合本文对象快速删除一个单词

dw删除整个单词包括空格

daw删除整个单词包括空格

diw不包括空格

dd删除一行

dt) 删除直到 ‘)’ 的内容

di) 可以删除整个括号内的内容

vim快速修改

r(replace)替换一个字符

s(substitute)替换并进入插入模式

c(change)和d的用法差不多

vim查询

/word:向光标之下寻找第一个值为word的字符串

?word:向光标之上寻找第一个值为word的字符串

n:重复前一个查找操作

N:反向重复前一个查找操作

*:当前词的向前匹配

#:当前词的向后匹配

Insert模式

a append 在当前光标后面插入

i insert 在当前光标前面插入

o open open a line below 在当前光标的下一行插入

A append after line 在当前行的后面插入

I insert before line 在当前行的第一个插入

O append a line above 在当前行的上面插入

快速纠错

ctrl+h删除上一个字符

ctrl+w删除上一个单词

ctrl+u删除当前行

shell

ctrl+a快速移动到开头

ctrl+e快速移动到结尾

ctrl+f光标后移

ctrl+b光标前移

快速模式切换

insert->normal: ctrl+c ctrl+[

gi:normal模式切换到insert模式,且到上次编辑地方

Command命令模式

normal模式下:进入命令模式

:q退出 :q! 强制退出 :w保存 :w!强制退出 :wq 保存并退出

:vs(vertical split) 垂直左右分屏

:sp(split)上下水平分屏

:set nu设置行号

:% s/java/python/g 全局替换java->python

vim替换

substitute命令允许我们查找并且替换掉文本,并且支持正则表达式

:[range]s[ubstiute]/{pattern}/{string}/[flags]

range表示范围比如:10,20表示10-20行,%表示全部

pattern要替换的模式,string是替换后的文本

flags有几个常用的标志

  • g(global)表示全局范围内执行

  • c(confirm)表示确认,可以确认或者拒绝

  • n(number)报告匹配到的次数而不替换,可以用来查询匹配次数

:n1,n2s/word1/word2/g:n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2

:1,$s/word1/word2/g:将全文的word1替换为word2

:1,$s/word1/word2/gc:将全文的word1替换为word2,且在替换前要求用户确认

visual可视模式

normal模式下进入visual模式

v选择字符

V选择行

ctrl+v块状选择

多文件操作

概念:

  • Buffer:内存缓冲区
  • Window:Buffer的可视化分割区域
  • Tab:组织Window为一个工作区
    :ls 列举当前缓冲区

:b [num] 跳转到[num]缓冲区

:b [name] 跳转到[name]缓冲区

:bpre/bnext/bfirst/blast 跳转到上一个/下一个/第一个/最后一个缓冲区

:e [name] 编辑[name]文件

C-w s 水平分割窗口

C-w v 垂直分割窗口

C-w w 循环切换窗口

C-w h/j/k/l 切换到←/↓/↑/→窗口

C-w H/J/K/L 移动当前窗口向←/↓/↑/→

C-w = 所有窗口等宽高

C-w _/| 当前窗口最大化高度/宽度

[num]C-w _/| 当前窗口高度设为[num]行/列

:tabnew 新建标签页

:tabe [name] 在新标签页打开[name]文件

:tabc 关闭当前标签页和窗口

:tabo 只保留当前标签页并关闭其他的

C-w T 将当前窗口移动到新标签页

:tabn [num] 切换到[num]标签页,没有[num]表示下一个

:tabp 切换到上一个标签页

vim的text object

命令格式:

[number][HTML_REMOVED][text object]

number 次数

command 命令 d(delete), c(change), y(yank), v(visual)

text object 文本对象 w(单词word), s(句子sentence),p(段落paragraph)

eg:

iw 插入单词

viw 选择模式插入单词

vaw around word 选中当前单词和单词之后的空格

vis/vas/vip/vap

vi(/)/[HTML_REMOVED]/{/}/”/”/’/’

va(/)/[HTML_REMOVED]/{/}/”/”/’/’

ciw 删除单词并插入

ci{ 删除{内容

vim复制粘贴与寄存器的使用

vim在normal模式复制粘贴
Normal模式下复制粘贴分别使用y(yank)和p(put),剪切d和p

可以使用v(visual)命令选中所要复制的地方,然后p粘贴

配合文本对象:比如yiw复制一个单词,yy复制一行

insert模式复制粘贴

和其他文本编辑器差不多,但粘贴代码有个坑

在vimrc中设置了autoindent,粘贴代码缩进错乱

这个时候需要使用:set paste:setnopaste解决

vim寄存器

vim里操作的是寄存器而不是系统剪切版,这和其他编辑器不同

默认使用d删除或者y复制的内容都放到了“无名寄存器”

用x删除一个字符放到无名寄存器,然后p粘贴,可以调换俩字符

register

通过"{register}前缀可以指定寄存器,不指定默认无名寄存器

比如使用"ayiw复制一个单词到寄存器a中,’bdd删除当前行到寄存器b中

:reg a查看寄存器a中的内容

“a p粘贴a寄存器中的内容

其他常见寄存器
除了有名的寄存器a-z,vim中还有一些其他常见寄存器

复制专用寄存器"0使用y复制的文本同时会被拷贝到复制寄存器0

系统剪切版"+可以复制到系统剪切板

其他寄存器,比如"%当前文件名,"上次插入的文本

:set clipboard=unnamed可以让你直接复制粘贴系统剪切板内容

需求:批量处理文本

vim宏(marco)

宏可以看成是一系列命令的集合

我们可以使用宏【录制】一系列操作,然后用于回放

宏可以方便的把一下列命令用在多行文本上

使用宏

vim使用q来录制,同时也也是q结束录制

使用q{register}选择要保存的寄存器,把录制的命令保存其中

使用@{register}回放寄存器中保存的一系列命令

vim补全

常见的三种补全类型

使用Ctrl+n和Ctrl+p补全单词
使用Ctrl+x,Ctrl+f补全文件名
使用Ctrl+x,Ctrl+o补全代码,需要开启文件类型检查,安装插件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值