侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 274 篇文章
  • 累计创建 55 个标签
  • 累计收到 74 条评论

Linux vim 命令介绍和使用

Z同学
2020-09-03 / 0 评论 / 0 点赞 / 457 阅读 / 3,290 字
温馨提示:
本文最后更新于 2021-12-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

在linux下,使用最广的编辑器了vim。
下面主要介绍使用vim之中碰见的问题和常用的vim 的使用方式了。

常用指令

vim 编辑器的模式:

  • 正常模式: 可以使用快捷命令,可以输入命令
  • 插入模式: 可以修改文本内容。 正常模式下按i、a、o等都可以进入插入模式。按esc回到正常模式
  • 可视模式: 可以移动光标选择文本。正常模式下按v可以进入。按esc回到正常模式
  • 替换模式: 可以通过指令替换内容。正常模式下,按R进入。按esc回到正常模式

启动vim

//介绍,后面的xxx 是你的文件路径,全路径
vim -r XXX: //恢复上次异常退出的文件;
vim -R XXXX: 以只读的方式打开文件,但可以强制保存;
vim -M file: 以只读的方式打开文件,不可以强制保存;
vim -y num XXXX: 将编辑窗口的大小设为num行;
vim + XXXX: 从文件的末尾开始;
vim +num XXXX: 从第num行开始;
vim +/string XXXX: 打开file,并将光标停留在第一个找到的string上。
vim –remote XXXX: 用已有的vim进程打开指定的文件。如果你用vim,会寻找名叫VIM的服务器;如果你已经有一个gvim在运行了, 你可以用gvim –remote xxx在已有的gvim中打开文件。

上面的命令,启动之后就是正常模式了。

正常模式下 指令

这是针对光标的指令集,主要就是移动当前光标的位置。

h或退格  //左移一个字符;
l或空格  //右移一个字符;
j       // 下移一行;
k       // 上移一行;
gj// 移动到一段内的下一行;
gk//移动到一段内的上一行;
+或Enter// 把光标移至下一行第一个非空白字符。
-//把光标移至上一行第一个非空白字符。
w//前移一个单词,光标停在下一个单词开头;
W//移动下一个单词开头,但忽略一些标点;
e//前移一个单词,光标停在下一个单词末尾;
E//移动到下一个单词末尾,如果词尾有标点,则移动到标点;
b//后移一个单词,光标停在上一个单词开头;
B//移动到上一个单词开头,忽略一些标点;
g// 后移一个单词,光标停在上一个单词末尾;
gE 同 ge //不过‘单词’包含单词相邻的标点。
(//移动到段首
)//移动到断尾
{ //移动到上一段首
} // 后移1段。
fc //把光标移到同一行的下一个c字符处
Fc //把光标移到同一行的上一个c字符处
tc //把光标移到同一行的下一个c字符前
Tc //把光标移到同一行的上一个c字符后
; //配合f & t使用,重复一次
, //配合f & t使用,反向重复一次

这主要是整个页面的屏幕指令

PgUp //上翻一屏
PgDn //下翻一屏
n%   //到文件n%的位置。
zz   //将当前行移动到屏幕中央。
zt   //将当前行移动到屏幕顶端。
zb   //将当前行移动到屏幕底端。

这是针对文本的指令集,主要就是保存,开启文件浏览等操作

:saveas newfilename //另存为
:wq //保存并退出。
:x //保存并退出。
:q //退出当前窗口。不保存
:q! //不保存,强制退出。
ZZ  //保存并退出。 不用输入: 就可以了。
:enew –编译一个未命名的新文档。(CTRL-W n)
:e //重新加载当前文档。放弃当前文件的修改。
:e! // 重新加载当前文档,并丢弃已做的改动。
:e#或ctrl+^ //回到刚才编辑的文件,很实用。
:f或ctrl+g //显示文档名,是否修改,和光标位置。
:f filename //改变编辑的文件名,这时再保存相当于另存为。
gf //打开以光标所在字符串为文件名的文件。
:w //保存修改。
:n1,n2w filename //选择性保存从某n1行到另n2行的内容。
:browse e //会打开一个文件浏览器让你选择要编辑的文件。 如果是终端中,则会打开netrw的文件浏览窗口; 如果是gvim,则会打开一个图形界面的浏览窗口。 实际上:browse后可以跟任何编辑文档的命令,如sp等。 用browse打开的起始目录可以由browsedir来设置:
:set browsedir=last // 用上次访问过的目录(默认);
:set browsedir=buffer //用当前文件所在目录;
:set browsedir=current // 用当前工作目录;
:Sex //水平分割一个窗口,浏览文件系统;
:Vex //垂直分割一个窗口,浏览文件系统;

批量操作的相关指令: 例如批量删除指定行 ,批量修改等。

c[n]w // 改写光标后1(n)个词。
c[n]l //改写光标后n个字母。
c[n]h //改写光标前n个字母。
[n]cc //修改当前[n]行。
[n]s  //以输入的文本替代光标之后1(n)个字符,相当于c[n]l。
[n]S  //删除指定数目的行,并以所输入文本代替之。

剪切,复制,粘贴

[n]x  //剪切光标右边n个字符,相当于d[n]l。
[n]X  //剪切光标左边n个字符,相当于d[n]h。
yy or Y //复制整行文本。
y[n]w  //复制一(n)个词。
y[n]l //复制光标右边1(n)个字符。
y[n]h  //复制光标左边1(n)个字符。
y   //从光标当前位置复制到行尾。
y0  // 从光标当前位置复制到行首。
y1G或ygg  //复制光标以上的所有行。
yG  //复制光标以下的所有行。
yaw和yas //复制一个词和复制一个句子,即使光标不在词首和句首也没关系。

d or D   //删除(剪切)当前位置到行尾的内容。
d[n]w   //删除(剪切)1(n)个单词
d[n]l  //删除(剪切)光标右边1(n)个字符。
d[n]h  //删除(剪切)光标左边1(n)个字符。
d0    //删除(剪切)当前位置到行首的内容
[n] dd //删除(剪切)1(n)行。
:m,nd<cr> //剪切m行到n行的内容。
d1G或dgg //剪切光标以上的所有行。
dG //剪切光标以下的所有行。
daw和das //剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。
d/f<cr>  //这是一个比较高级的组合命令,它将删除当前位置 到下一个f之间的内容。
p   // 在光标之后粘贴。

撤销,恢复

[n] u   //取消n个改动, 如果不输入数组,只改变上一次操作
:undo 5  //撤销5个改变。
:undolist   //你的撤销历史。
ctrl + r   //恢复最后的改动。
U  //取消当前行中所有的改动。
:earlier 4m  //回到4分钟前
:later 55s  //前进55秒

文档编码: 修改文件的编码格式,查询文件的编码格式

:w ++enc=gbk   //不管当前文件什么编码,把它转存成gbk编码。 还可以是utf-8 等等。
:set fenc或:set fileencoding   //查询当前文件的编码格式

文件格式: 主要是unix,dos,mac 三种文件格式,区别在于针对回车键的编码

:e ++ff=dos 文件名称   //让vim用dos格式打开这个文件。
:w ++ff=mac 文件名称   //以mac格式存储这个文件。
:set ff   //显示当前文件的格式。

下面介绍进入插入模式

在正常模式下,输入下面快捷指令,进入插入模式,也就是针对内容进行编辑操作

i  //在光标前插入;
I  //在当前行第一个非空字符前插入;
gI //在当前行第一列插入;
a  //在光标后插入;
A   //在当前行最后插入;
o   //在下面新建一行插入;
O   //在上面新建一行插入;
:r filename  //在当前位置插入另一个文件的内容。
:[n]r filename //在第n行插入另一个文件的内容。
:r !date   //在光标处插入当前日期与时间。
:r !command // 可以将其它shell命令的输出插入当前文档。

上面的指令输入完毕后,你就会从正常模式,进入到插入模式了。就可以进行输入等操作

还有很多其他的命令,但是我们一般使用,可能很少会用到,如果有需求的话,可以自己查询学习。

问题

1.如果出现了编辑时警告,说明你上次退出时出现了错误,造成vim的缓存文件没有删除,可以在该文件目录下,执行下面的代码

ls -alh | grep "config"  // config 是我的文件名
rm -rf .config.json.sw  // 手动强制删除 。注意文件名称的准确性。 否则删除之后无法恢复的。

0

评论区