vim使用
前言
作为一个历史上最出色的编辑器,拥有自定义按键功能,并且可以大大提高工作效率
在linux中的安装
在linux中只需要一行指令安装
1 | sudo apt install vim |
linux 上的配置文件
1 | " etc/vim/vimrc |
vim使用
移动光标
h j k l
上 下 左 右ctrl-y1
上移一行ctrl-e1
下移一行ctrl-u1
上翻半页ctrl-d1
下翻半页ctrl-f1
上翻一页ctrl-b1
下翻一页w
跳到下一个词首,按标点或单词分割W
跳到下一个词首,以空格分割e
跳到下一个词尾,以标点分割E
跳到下一个词尾b
跳到上一个词,以标点分割B
跳到上一个词首0
跳至行首,不管有无缩进,就是跳到第0个字符^
跳至行首的第一个字符$
跳至行尾gg
跳至文首G
调至文尾ngg/nG
调至第n行gd
跳至当前光标所在的变量的声明处fx
在当前行向后找x字符,找到了就跳转到字符位置;
重复上一个f命令,而不用重复的输入fx*
查找光标所在处的单词,向下查找#
查找光标所在处的单词,向上查找g_
移动到本行最后一个不是 blank 字符的位置
删除复制
dd
删除光标所在行,应该说是剪切,删除之后 vim 的缓冲区中会存放删除的内容dw
删除一个字符diw
删除一个单词dg_
或D
从当前位置删除到行末dta
删除当前行位置之后的所有内容直到遇到字符a
dTa
删除当前行位置之前的所有内容直到遇到字符a
x
删除当前字符X
删除前一个字符yy
复制一行,会复制换行符yw
复制一个字符yiw
复制一个单词yg_
或Y
复制到行末p
粘贴粘贴板的内容到当前光标之前P
粘贴粘贴板的内容到当前光标之后
模式转换
i
从当前光标之前进入插入模式I
在行首进入插入模式a
追加模式,当前光标之后进入插入模式A
在行尾进入插入模式o
在当前行之下新加一行,并进入插入模式O
在当前行之上新加一行,并进入插入模式Esc
退出当前模式v
进入可视模式 visual mode,进入可视模式之后可以使用在普通模式的按键进行相应的操作V
进入行可视模式 line visual modectrl-v
进入块可视模式 block visual mode,但是要注意在 windows 中的 ideavim 中,默认是ctrl-q
编辑
J
将下一行和当前行连接为一行cc
删除当前行并进入编辑模式cw
删除当前字符,并进入编辑模式c$
擦除从当前位置至行末的内容,并进入编辑模式s
删除当前字符并进入编辑模式S
删除光标所在行并进入编辑模式xp
交换当前字符和下一个字符u
撤销<C-r>
返回撤销r
替换为输入的字符R
连续替换ctrl+r
重做guw
当前字符切换为小写gUw
当前字符切换为大写guiw
当前单词切换为小写gUiw
当前单词切换为大写~
切换当前字符的大小写>>
将当前行右移一个tab<<
将当前行左移一个tab==
自动缩进当前行gg=G
文件缩进<C-n>
插入模式自动补齐<C-p>
插入模式自动补齐
查找替换
/pattern
向后搜索字符串pattern?pattern
向前搜索字符串pattern"\c"
忽略大小写"\C"
大小写敏感n
下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个)N
上一个匹配(同上):%s/old/new/g
搜索整个文件,将所有的old替换为new:%s/old/new/gc
搜索整个文件,将所有的old替换为new,每次都要你确认是否替换fa
查找当前行中下一个为a
的字符,并且跳到该位置nfa
查找当前行中下n
个为a
的字符,并且跳到该位置ta
查找当前行中上一个为a
的字符,并且跳到该位置nta
查找当前行中上n
个为a
的字符,并且跳到该位置
区域选择
<action>a<object>
区域选择<action>i<object>
区域选择action
可以是任何命令d
删除v
选中y
复制
object
可以是很多,下面是一部分w
一个单词W
一个以空格为分隔的单词s
一个句子p
一个段落"
引号中内容(
括号中内容
viw
选中当前单词vi"
选中当前在"
中的内容,不包括"
va"
选中当前在"
中的内容,包括"
vni(
选中当前在n
级括号中的内容,不包括括号vna(
选中当前在n
级括号中的内容,包括括号
退出文件
:w
将缓冲区写入文件,即保存修改:wq
保存修改并退出:wq!
强制保存修改并退出:x
保存修改并退出:q
退出,如果对缓冲区进行过修改,则会提示:q!
强制退出,放弃修改ZZ
保存退出
多文件编辑(多窗口操作)
vim file1..
同时打开多个文件:args
显示当前编辑文件:next
切换到下个文件:prev
切换到前个文件:next!
不保存当前编辑文件并切换到下个文件:prev!
不保存当前编辑文件并切换到上个文件:wnext
保存当前编辑文件并切换到下个文件:wprev
保存当前编辑文件并切换到上个文件:first
定位首文件:last
定位尾文件ctrl+^
快速在最近打开的两个文件间切换:split
或者:sp
把当前文件水平分割:vsplit
或者:vsp
把当前文件垂直分割:split file
把当前窗口水平分割,并且打开文件file:vsplit[vsp] file
把当前窗口垂直分割,并且打开文件file:new file
同split file
:close
关闭当前窗口:only
只显示当前窗口, 关闭所有其他的窗口:all
打开所有的窗口:vertical all
打开所有的窗口, 垂直打开:qall
对所有窗口执行:q操作:qall!
对所有窗口执行:q!操作:wall
对所有窗口执行:w操作:wqall
对所有窗口执行:wq操作ctrl-w h
跳转到左边的窗口ctrl-w j
跳转到下面的窗口ctrl-w k
跳转到上面的窗口ctrl-w l
跳转到右边的窗口ctrl-w t
跳转到最顶上的窗口ctrl-w b
跳转到最底下的窗口ctrl-w +
扩大窗口ctrl-w -
缩小窗口ctrl-w H
将窗口移动到最左边ctrl-w J
将窗口移动到最下边ctrl-w K
将窗口移动到最上边ctrl-w L
将窗口移动到最右边{height}CTRL-W _
将窗口设置成指定高度:saveas <path/to/file>
另存为<path/to/file>
:bn
下一个文件:bp
上一个文件:all
为参数列表中每一个文件打开一个窗户口:vertical all
以垂直分割的方法打开窗口
命令行中vim指令的参数
vim -o <file1 file2 ...>
以水平分屏的方式打开多个文件vim -O <file1 file2 ...>
以垂直分屏的方式打开多个文件
多标签编辑
:tabedit file
在新标签中打开文件file:tab split file
在新标签中打开文件file:tabp
切换到前一个标签:tabn
切换到后一个标签:tabc
关闭当前标签:tabo
关闭其他标签gt
到下一个tabgT
到上一个tab
buffer操作
-
非活动的缓冲区=
只读缓冲区a
当前被激活缓冲区h
隐藏的缓冲区%
当前的缓冲区#
交换缓冲区+
已经更改的缓冲区
文件操作
vim path/
打开目录h j k l
左,下,上,右-
返回上一目录enter
进入目录或者文件D
删除目录或文件R
重命名目录或文件ctrl+^
回退上次操作:q
退出vimc
使当前打开的目录成为当前目录d
创建目录%
创建文件gb
转到上一个标记的文件夹i
改变目标文件列表方式时^i
刷新当前打开的目录,更改排列样式mf
标记文件mu
unmark all marked filesmz
compress/decompress marked filegh
显示/不显示隐藏文件^h
标记隐藏文件列表a
转换显示模式,显示所有文件-只显示不隐藏文件-只显示隐藏文件qf
显示文件信息qb
列出被标记的文件历史gi
显示文件信息md
将标记的文件使用diff
模式me
编辑标记的文件,只显示一个,其余放入buffer
中mm
移动标记的文件到标记的文件目标路径中mc
copymt
移动到的目录
复制移动文件
mt
移动到的目录mf
标记要移动的文件mc
移动/复制
宏录制
qa
把操作记录在寄存器a
中@a
从寄存器a
中读取记录,并且 replay@@
取出最新的录制记录,并且 replayn@@
取出最新的录制记录,并且执行n
次 replay
文件差异对比
vimdiff file1 file2 [file3 [file4]]
文件对比,会以垂直分割的方式打开文件vim -d file1 file2 [file3 [file4]]
文件对比,会以垂直分割的方式打开文件- 折叠的行用
+ +--n lines: /* a
表示+ +—123 lines: /* a - 被删除的行用
---
表示 - 不同的的行会用高亮显示
- 折叠的行用
:diffsplit file
打开文件file
并且进行差异对比:diffupdate
把文本从一个窗口移到另一个,并以此来消除差异:dp
即:diff put
将把文字从左边拷到右边,从而消除两边的差异
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LuosBlog!