Linux vi/vim

1.vi/vim快捷键位图

详细可以参考:https://www.runoob.com/w3cnote/all-vim-cheatsheat.html

Linux vi/vim

2.vi/vim的三种模式

Linux vi/vim

基本上 vi/vim 共分为三种模式,分别是 命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)。 这三种模式的作用分别是:

命令模式:

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会在界面上输入一个字符i,i被当作了一个命令。

以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式:

在命令模式下按下i,a,o等就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/ END,移动光标到行首/行尾
  • Page Up/ Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件

按ESC键可随时退出底线命令模式。

3.vi/vim打开和新建文件

(1)打开文件:vi filename

(2)打开文件并到指定行:vi filename +[n],其中n为指定行数,如果不输入n,会到文件末尾行。

4.vi/vim的异常处理

如果vi/vim退出异常,在磁盘上可能会保存交换文件,此时输入vi filename会有E325提示。

Linux vi/vim

此时,可用ls -la命令查看到一个”.filename.swp”文件

Linux vi/vim

可以输入:recover恢复文件

Linux vi/vim

再用rm .filename.swp命令删除这个文件,再次使用vi filename就不会报错了。如果不需要恢复直接执行rm .filename.swp命令删除这个文件即可。

5.vi/vim命令合集

(1)命令模式切换到编辑模式:

①.插入模式

输入i,I,o,O,a,A等任何一个字母都可以进入vi插入模式。

  • i 在当前位置插入
  • I 在当前行首插入
  • a 在当前位置后插入
  • A 在当前行尾插入
  • o 在当前行之后插入一行
  • O 在当前行之前插入一行

②.取代模式

输入r和R会进入取代模式。

  • r 只会取代光标所在的那一个字符一次
  • R 会一直取代光标所在的文字,直到按下 ESC 为止

(2)命令模式切换到底线命令模式:

①.写入

  • :w 将编辑的数据写入文件中
  • :w! 若文件属性为只读时,强制写入该文件。(能不能写入与用户对文件的权限有关)

②.离开

  • :q 离开vi
  • :q! 在vi模式下修改过文件但在离开vi时又不想保存可用
  • :wq 或 :x 保存写入或修改的数据后离开vi
  • :wq! 强制保存写入或修改的数据后离开
  • ZZ 注意ZZ前面不需要输入”:”,若文件没有改动,则不保存离开,若档案已经被改动过,则保存后离开

③.另存为

  • :w [filename] 将文件的数据保存为 filename 这个文件
  • :n1,n2 w [filename] 将 n1 行到 n2 行的数据另存为成 filename 这个文件

④.读入其他文件的数据

  • :r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 filename 这个档案内容加到游标所在行后面

⑤.暂时离开vi模式

  • :! command 暂时离开 vi 到指令行模式下执行 command 的显示结果

(3)命令模式

①.移动光标

Linux vi/vim

上下左右移动行内移动行数移动屏幕移动 程序的段落移动程序的段落切换

  • [n]h 或 键盘左箭头([n]←)光标向左移动n个字符
  • [n]j 或 键盘下箭头([n]↓)光标向下移动n行
  • [n]k 或 键盘上箭头([n]↑)光标向上移动n行
  • [n]l 或 键盘右箭头([n]→)光标向右移动n个字符
  • [n]w 向后移动n个单词
  • [n]b 向前移动n个单词
  • [n]+空格符向右移动n个字符
  • 0或者Home键 到行首
  • ^ 到行首第一个不是空白字符的位置
  • $ 到行尾
  • n$ 到下面n行行尾
  • gg 到文件开头
  • G 到文件行尾
  • [n]gg 或 [n]G 或 :n 到第n行
  • [n]+enter键 向下移动n行
    • 到非空格符的下一行
    • 到非空格符的上一行
  • Control键+f 屏幕向下移动一页
  • Control键+b 屏幕向上移动一页
  • Control键+d 屏幕向下移动半页
  • Control键+u 屏幕向上移动半页
  • Control键+e 向下移动一行
  • Control键+y 向上移动一行
  • H 到屏幕顶部第一个字符
  • M 到屏幕中间第一个字符
  • L 到屏幕底部第一个字符
  • { 上一段
  • } 下一段
  • % 括号匹配及切换

②.搜索

  • /str str表示查找的内容,查找到指定内容之后可以使用n:查找下一个,N:查找上一个
  • ?str 向光标之上寻找一个字符串名称为str的字符串
    • 向后查找当前光标所在单词
  • 向前查找当前光标所在单词

③.替换

  • r 替换当前字符
  • R 一直替换当前行光标后字符
  • :%s/word1/word2/g word1替换成word2,全局替换,替换所有匹配
  • :s/word1/word2/g 可视区域替换,需要先选择要替换的范围
  • :%s/word1/word2/gc 确认替换,在替换时会有提示
  • :n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2
  • :1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2
  • :s/word1/word2/ 用word2替换word1,替换当前行的第一个匹配
  • :%s/word1/word2/ 用word2替换word1,替换所有行的第一个匹配
  • :1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 ,且在取代前显示提示字符给用户确认 (confirm) 是否需要取代。y为确认替换,n为不替换,a为替换所有,q为退出替换

④.删除

  • x 或 dl 删除光标所在字符,或者在一行当中选中的文字
  • nx 删除当前光标向后n个字符
  • X 或 dh 为向前删除一个字符
  • dd 删除光标所在一整行
  • dj 删除上一行
  • dk 删除下一行
  • dw 从光标位置删除到单词末尾
  • d} 从光标位置删除到段落结尾
  • nd 删除当前行开始的n行
  • ndd 删除光标所在向下n行
  • d1G 删除光标所在到第一行的所有数据
  • dG 删除光标所在到最后一行的所有数据
  • d$ 或 D 删除光标所在处到该行的最后一个字符
  • d0 删除光标所在处到该行第一个字符
  • kdgg 删除当前行之前的所有行(不包括当前行)
  • jdG 删除当前行之后的所有行(不包括当前行)
  • :n1,n2d 删除n1到n2行
  • :n1,$d 删除n1行及以后所有行
  • J 删除两行之间的空格

⑤.复制

  • yy 复制游标所在那一行的所有数据
  • nyy n为数字,复制光标所在的向下 n 行
  • y1G 复制游标所在行到第一行的所有数据
  • yG 复制游标所在行到最后一行的所有数据
  • y0 复制光标所在的那个字符到该行行首的所有数据
  • y$ 复制光标所在的那个字符到该行行尾的所有数据

⑥.粘贴

  • p 将已复制的数据贴在光标下一行
  • P 将已复制的数据贴在游标上一行!

⑦.标记与定位

  • m[flag] 添加标记,flag可以是a-z或者A-Z之间的任意一个字母
  • ‘[flag] 直接定位到flag所在位置

⑧.剪切

  • 在vi中,删除操作其实就相当于剪切操作
  • 正常模式下按v(逐字)或V(逐行)进入可视模式,然后用h、j、k、l等命令移动即可选择某些行或字符,再按d即可剪切
  • ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
  • :n1,n2d 将n1到n2行剪切。利用p命令可将剪切后的内容进行粘贴。
  • :n1,n2 m n3 将第n1到n2行移动到第n3行之后。

⑨.撤销和重做

  • u 撤销上次命令
  • U 撤销对整行的操作
  • Control键+r 重做,即恢复撤销的命令

⑩.重复执行和缩进

  • . 重复执行前一个操作
  • 向右增加缩进

  • << 向左增加缩进

(4)可视模式

可视模式可以和移动光标命令连用,如ggVG可以选中所有内容。

  • v 可视模式,从光标位置开始按照正常模式选择文本
  • V 可视行模式,选中光标经过的所有行
  • Control键+v 可视块模式,垂直方向选中文本

Original: https://www.cnblogs.com/vivianwenwen/p/12118893.html
Author: 温昀
Title: Linux vi/vim

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585263/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • redis启动失败 提示Unregistered Authentication Agent for unix-process:6176

    使用宝塔软件安装的redis 一直没启动起来。 使用 journalctl -xe 命令查看原因,发现redis.pid已经存在。 进入该目录,删除redis.pid。 再使用sy…

    Linux 2023年5月28日
    0326
  • 假如,程序员面试的时候说真话

    做程序员这么长时间了,经常能够听到一句话:面试造火箭,入职拧螺丝。而且,随着就业环境越来越卷,现在只会造火箭恐怕都不行了,得能造个空间站才行。 回想自己刚毕业那会儿,哪有什么八股文…

    Linux 2023年6月7日
    070
  • Git的使用

    Git的概念 Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的项目 Git的安装 Git官网https://git-scm.com/下载安装直接下一步…

    Linux 2023年6月13日
    075
  • Java面向对象之各种变量详解

    在Java中一定有很多变量让大家头疼,成员变量、类变量、局部变量等等,今天就来分别认识认识他们吧! Java面向对象之各种变量详解 前言 在 Java语言中, 根据定义变量位置的不…

    Linux 2023年6月13日
    071
  • ansible-复制模块

    简介:临时的,在ansible中是指需要快速执行的单条命令,并且不需要保存的命令。对于复杂的命令则为 playbook。 1、复制模块 可在终端执行ansible-doc copy…

    Linux 2023年6月6日
    096
  • apparmor 源码分析

    这里不对apparmor做介绍,记录一下源码分析过程。 static int __init apparmor_init(void) -> security_add_hooks…

    Linux 2023年6月13日
    064
  • php发送邮件 (phpmailer)

    1.首先下载phpMailer文件官方文件https://sourceforge.net/projects/phpmailer/; 还有class.smtp.php. 2.去配置一…

    Linux 2023年6月14日
    070
  • 解决微信Windows客户端无法播放视频问题

    问题描述 我的Windows端微信版本是3.6.0,更新后点开视频,没有播放按钮出现,并且过一会就会卡死,并且整个微信程序崩掉。 问题解决 后来发现,是微信客户端的 播放器插件问题…

    Linux 2023年6月14日
    0351
  • python小技巧

    关于 ipython 1 Tab补全 从外观上,IPython shell和标准的Python解释器只是看起来不同。IPython shell的 进步之一是具备其它IDE和交互计算…

    Linux 2023年6月8日
    087
  • 什么?Android上面跑Linux?

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 前言 众所周知,现在程序员因为工作、个人兴趣等对各种系统的需求越来越大,部分人电脑做的还是双系统。其中,比较常见的有各种模拟器、…

    Linux 2023年5月27日
    0110
  • QNAP container station安装 redis

    打开container station,即docker,安装Redis 选择最新的即可 命令处请务必在尾部添加语句: –requirepass “yourpasswor…

    Linux 2023年5月28日
    064
  • K8s-小型综合实验(k8s+keeplived+nginx+iptables)

    K8S小型综合实验(k8s+keeplived+nginx+iptables) 实验目的 1.Kubernetes 区域可采用 Kubeadm 方式进行安装。 2.要求在 Kube…

    Linux 2023年6月13日
    096
  • MACOS Terminal终端:更改zsh模式到bash模式(切换shell)

    MACOS Terminal终端:更改zsh模式到bash模式(切换shell) 一、GUI界面切换: preferences… -> shell open wi…

    Linux 2023年5月28日
    0163
  • 001.云桌面整体解决方案实施

    桌面云概述 桌面云介绍 本桌面云整体交付方案基于深信服aDesk桌面云实现。 深信服桌面云是采用云计算的思想,将用户的桌面操作系统以服务的形式通过网络进行交付,可以让用户在不同设备…

    Linux 2023年6月13日
    0101
  • 【PHP代码审计】TP3.2某传销系统getshell

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/sevck/p/16547738.htmlAuthor:…

    Linux 2023年5月28日
    087
  • DHCP超级作用域

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球