前言
作为一个历史上最出色的编辑器,拥有自定义按键功能,并且可以大大提高工作效率
在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删除当前行位置之后的所有内容直到遇到字符adTa删除当前行位置之前的所有内容直到遇到字符ax删除当前字符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标记文件muunmark all marked filesmzcompress/decompress marked filegh显示/不显示隐藏文件^h标记隐藏文件列表a转换显示模式,显示所有文件-只显示不隐藏文件-只显示隐藏文件qf显示文件信息qb列出被标记的文件历史gi显示文件信息md将标记的文件使用diff模式me编辑标记的文件,只显示一个,其余放入buffer中mm移动标记的文件到标记的文件目标路径中mccopymt移动到的目录
复制移动文件
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将把文字从左边拷到右边,从而消除两边的差异