vim/vi常用命令集

2023-11-15

格式:指令[或指令] 参数 // 指令解释

文件操作

vimvi】 // 打开一个空文件

vimvi】 a.txt // 打开当前目录中的a.txt文件;若文件不存在则创建一个名为a.txt的文件(指定保存位置为当前目录)

vimvi】 /home/a.txt // 打开home目录中的a.txt文件;若文件不存在则创建一个名为a.txt的文件(指定保存位置为/home)

vimvi】 + a.txt // 打开当前目录中的a.txt文件,并定位到文件末尾;若文件不存在则创建一个名为a.txt的文件(指定保存位置为当前目录)

vimvi】 +/Hello a.txt // 打开当前目录中的a.txt文件,并将光标置于第一个与Hello匹配的串处

vimvi】 +25 /home/a.txt  // 打开e盘目录中的a.txt文件,并定位到文件的25行首

vimvi】 + /home/a.txt // 打开e盘目录中的a.txt文件,并定位到文件末尾;若文件不存在则创建一个名为a.txt的文件(指定保存位置为/home/

vimvi】 a.txt b.txt c.txt // 打开当前目录中的a.txt,b.txt,c.txt文件;若文件不存在则创建一个名为a.txt,b.txt,c.txt的文件(指定保存位置为当前目录) 

:w // 保存文件

:w! // 强制保存文件(文件为只读类型也会被保存)

:w /home/a.txt // 保存到/home/a.txt

:w! /home/a.txt // 强制保存到/home/a.txt

:x:wq】 // 保存并退出

:x:wq】 /home/a.txt   // 保存到/home/a.txt,并退出

:q // 退出(如果未保存,则会退出失败)

:q! // 不保存,强制退出

:open  /home/b.txt // 在新缓冲区中打开/home/b.txt文件

:e /home/test.txt // 在新缓冲区中打开/home/test.txt文件

:set fileformat? // 查看当前格式 - unix/dos

:set fileformat=unix // 将当前文件设置成unix格式

:set termencoding=gbk // 将文件内容使用gbk编码显示到SecureCRT等终端上

光标移动

h  j  k  l // 左 下 上 右

ctrl + e // 向下滚动一行

ctrl + y // 向上滚动一行

ctrl + d // 向下滚动半屏

ctrl + u // 向上滚动半

ctrl + f // 下一页

ctrl + b // 上一页

ctrl + g // 移动到文件末尾

% // 括号匹配 - 小括号/中括号/大括号

// 跳到下一个单词的起始处(使用非字母、数字及下划线的字符作为分隔符号)

W // 跳到下一个单词的起始处(仅使用空格、Tab、回车作为分隔符号)

// 跳到上一个单词的起始处(使用非字母、数字及下划线的字符作为分隔符号)

// 跳到上一个单词的起始处(仅使用空格、Tab、回车作为分隔符号)

e // 跳到当前单词的末尾(使用非字母、数字及下划线的字符作为分隔符号)

E // 跳到当前单词的末尾(仅使用空格、Tab、回车作为分隔符号)

0 // 跳到当前行行首

^ // 跳到当前行最前字符的位置

$ // 跳到当前行行末

gg // 跳到第一行最前字符的位置

gd // 跳转当前光标处变量或函数的定义处

G // 跳到当前文件最后一行的最前字符的位置

5G:5】 // 跳转到第5行最前字符的位置

fx // 在当前行中向后查找字符x

Fx //在当前行中向前查找字符x 

; // 重复上一次的f或F命令

, // 执行f或F命令时,向前查找字符x

* // 向后查找当前光标下的单词

# // 向前查找当前光标下的单词

·. // Tab上面的字符+句号   回到上一次编辑所在的行首

H // 到当前屏幕的最上一行

M // 到当前屏幕的中间一行

L // 到当前屏幕的最下一行

插入模式

i // 从当前光标位置插入

// 从当前行起始处插入

a // 在光标之后插入

A // 在当前行末插入

// 在当前行下一行插入一个新行

O // 在当前行上一行插入一个新行

ctrl + n // 下一个提示匹配

ctrl + p // 上一个提示匹配

esc // 退出编辑模式

文本选择

v // 启动可视模式,移动光标选中字符

V // 启动行可视模式,移动光标选中行

ctrl + v // 启动块可视模式

o // 移动到选择块的另外一端

U // 将当前选择块转成大写

O // 移动到选择块的另外一对角上

aw // 选中一个单词

ab // 选中一个匹配块(如:小括号/中括号/大括号等)

aB // 选中一个括号匹配块

ib // 选中小括号中的内容

iB // 选中大括号中的内容

> // 右移

// 左移

y // 复制

// 删除

~ // 将当前选择块内容大小写切换

编辑

cc // 删除当前行内容(并切换到插入模式)

cw // 删除当前光标到所在单词末间的内容(并切换到插入模式)

caw // 删除当前单词(并切换到插入模式)

c$ // 删除当前光标到行末的内容(并切换到插入模式)

s // 删除当前光标字符(并切换到插入模式)

S // 删除当前行内容(并切换到插入模式)

// 将下一行挪到当前行结尾

// 替换光标所在处一个字符

rx // 将当前光标处字符替换为字符x

// 相当于按了insert键,直到按ESC键退出

u // 撤销

ctrl + r // 重做

. // 重复上次命令

// 当前光标下字符的大小写转换

g~iw // 当前光标下单词的大小写转换

gUiw // 转换当前光标下单词为大写

guiw // 转换当前光标下单词为小写

<< // 左缩进

>> // 右缩进

== // 自动缩进对齐

剪切、复制和粘贴

dd // 剪切当前行

ndd // 剪切从当前行起的n行内容

dw // 剪切到下一个单词开头

de // 剪切当前光标到本单词末尾

dE // 剪切当前光标到本单词末尾包括标点在内

db // 剪切当前光标到前一个单词

dB // 剪切当前光标到前一个单词包括标点在内

daw // 剪切当前单词

x // 剪切当前字符

nx // 剪切当前的n个字符

X // 剪切当前光标的前一个字符

D // 剪切当前光标到行尾

dG // 剪切当前光标到文件末尾的所有内容

d0 // 剪切当前光标到本行行首的所有内容

d$ // 剪切当前光标到本行行尾的所有内容

d^ // 剪切当前光标到本行首间的内容

:1,100d // 剪切1~100行

:100d // 剪切第100行

:1,100 mo $ // 将1~100行的内容移动到最后一行

yy // 复制当前行

nyy // 复制从当前行起的n行内容

yaw // 复制当前光标下的单词

yw // 复制当前光标到所在单词末间的内容

y$ // 复制当前光标到行末间的内容

y^ // 复制当前光标到行首间的内容

yG // 复制当前光标到文件末尾间的内容

// 在当前光标后插入复制的内容

// 在当前光标前插入复制的内容

]p // 以恰当的缩进插入复制的内容

:1,100 co 200 // 将1~100的内容复制到第200行

:100,102 co $  // 将100~102行的内容复制到最后一行

搜索和替换

:set hlsearch // 开启匹配字符串的高亮显示

:nohlsearch // 关闭匹配字符串的高亮显示

* // 向后搜索光标所在位置的单词

# // 键可以向前搜索光标所在位置的单词

/Hello // 搜索Hello字符串

?Hello // 向前搜索Hello字符串

/Hello\c // 搜索Hello字符串(忽略大小写)

?Hello\c // 向前搜索Hello字符串(忽略大小写)

// 向正方向搜索下一个字符串

// 向反方向搜索下一个字符串

:%s/Hello/Test/g // 全局替换当前文件中所有的Hello为Test

:%s/Hello/Test/gc // 全局替换当前文件中所有的Hello为Test(需要逐个确认)

:%s/Hello/Test/gci // 全局替换当前文件中所有的Hello(忽略大小写)为Test(需要逐个确认)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vim/vi常用命令集 的相关文章

  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • 在 Linux 上以编程方式设置 DNS 名称服务器

    我希望能够通过我的 C C 程序为 Linux 上的 DNS 名称服务器添加 IP 地址 我在一个带有只读 etc resolv conf 的嵌入式平台上 这意味着我不能简单地将 nameserver xxx xxx xxx xxx 行添加
  • 如何在 Ubuntu 中创建公共 HTML 文件夹?

    简单的问题 但由于某种原因我无法在谷歌上找到确切的答案 我在 Slicehost 上安装了全新的 Ubuntu 并且想在我的主目录中为包含一堆静态 HTML 文件的简单网站创建一个公共目录 我该怎么做呢 只是打字的问题吗mkdir publ
  • 如何在linux中以编程方式获取dir的大小?

    我想通过 C 程序获取 linux 中特定目录的确切大小 我尝试使用 statfs path struct statfs 但它没有给出确切的大小 我也尝试过 stat 但它返回任何目录的大小为 4096 请建议我如何获取 dir 的确切大小
  • 使用非规范地址检索内存数据会导致 SIGSEGV 而不是 SIGBUS

    我无法使用以下汇编代码产生 总线错误 这里我使用的内存地址不是合法的 规范地址 那么 我怎样才能触发该错误呢 我在带有 NASM 2 14 02 的 Ubuntu 20 04 LTS 下运行这段代码 但它会导致负载出现 SIGSEGV 分段
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 使用os.execlp时,为什么`python`需要`python`作为argv[0]

    代码是这样的 os execlp python python child py other args this works os execlp python child py other args this doesn t work 我读过
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • cdc_acm:无法设置 dtr/rts - 无法与 USB cdc 设备通信

    我试图使用 pic24fj128gb206 枚举 usb cdc 设备 设备似乎已正确枚举 但是当我将设备连接到 Linux PC 时 我从内核收到以下警告消息 cdc acm 1 8 1 6 7 1 0 failed to set dtr
  • 为什么同一个curl命令在windows和linux下输出不同的东西?

    为什么同样的curl o file https www link com 命令输出不同的东西 例如 如果我运行命令curl o source txt https www youtube com playlist list PLIx6Fwnp
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设

随机推荐

  • 深度学习的名词解释

    深度学习入门必须理解这25个概念 神经网络基础 1 神经元 Neuron 就像形成我们大脑基本元素的神经元一样 神经元形成神经网络的基本结构 想象一下 当我们得到新信息时我们该怎么做 当我们获取信息时 我们一般会处理它 然后生成一个输出 类
  • 【C语言程序设计实验】试卷管理系统(完整代码+函数详解) -->源代码文件文章末尾免费领取

    目录 实验简介 一 实验要求 二 实验代码 1 完整代码 2 代码解析 1 get next question number 2 add question 3 delete question 4 backup questions 5 del
  • js实现一个简易计算器

    正文 使用js实现一个简易计算器 可以进行简单的加减乘除 js代码 function jishuan 1 获取num1 num2 var num1 document getElementById num1 value var num2 do
  • TCP协议三次握手和四次分手以及数据传输过程

    1 三次握手 TCP是面向连接的 在面向连接的环境中 开始传输数据之前 在两个终端之间必须先建立一个连接 建立连接同步的过错称为三次握手 具体过程如下 1 当主机A想同主机B建立连接 主机A会发送SYN给主机B 初始化序列号seq x 主机
  • 深入了解数据导入的一些解决方案

    项目中除了有数据导出之外 也存在批量数据导入的场景 比如通过Execl电子表格进行批量开卡 批量导入用户或者部门信息等 今天探讨一下常见的数据导入方案 0x01 同步导入 如果批量导入的数据就是几十条到一两百条的数据量的话 而且每条数据导入
  • angular:使用Router.navigateByUrl传递state后如何在新组建获取state传递的data

    问题 如题 解决办法 使用history state来获取
  • 网络分析器Wireshark过滤器设置

    1 简介 Wireshark是目前全球使用最广泛的开源抓包软件 可以对网络进行故障定位 对网络黑客攻击进行快速定位 分析底层通信机制等 2 Wireshark安装 下载地址 Wireshark Go Deep https www wires
  • Mybatis快速学习笔记(建议收藏)

    Mybatis快速学习目录 Mybatis概念 MyBatis 快速入门 Mapper代理开发 MyBatis核心配置文件 配置文件的各种细节 Mybatis三部曲 如何解决字段名和属性名不一致问题 Mybatis如何接收来自数据库参数 多
  • 引用window自定义变量以及ts在window上自定义变量数据类型报错的解决方案

    一 问题描述 举个例子 在TypeScript中 当我们需要给window对象添加全局变量 如testName 或者需要使用window下自定义创建的变量 以testName为例 会出现以下ts报错 类型 Window typeof glo
  • 计算机网络详细讲解-----核心,边缘;datagram,virtual circuit【计算机网络养成】

    计算机网络养成 内容导航 计算机网络养成 网络边缘 应用进程和应用进程联系的模式 客户 服务器模式 C S架构 对等模式 peer peer 模式 网络边缘 采用网络设施的面向连接服务 目标 握手 TCP 传输控制协议 传输层 Transm
  • 英语专栏——application

    application application的基本意思是申请 申请表 但在IT术语中它是应用程序的意思 表示某种技术 系统 产品的应用 我们所称的APP就是这个的缩写 From Wikipedia Application software
  • Vue3通透教程【十五】补充TS开发环境搭建问题

    文章目录 写在前面 Node中搭建TS开发环境 验证环境 写在最后 写在前面 专栏介绍 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章 应粉丝要求开始更新 Vue3 的相关技术文章 Vue 框架目前的地位大家应该都晓得 所谓三大框
  • Sigrity高速信号仿真之直流压降仿真

    1 简介 本文主要介绍直流压降仿真分析 电源直流压降的仿真 又称电源直流跌落仿真 DC IR Drop 或IR Drop HyperLynx软件中集成了电源完整性电源电压跌落仿真功能 DC Drop Simulation PowerScop
  • 2023 年 IDEA Maven 源修改为国内阿里云镜像的正确方式,亲测可用

    前言 由于众所周知的原因 maven的库在中国大陆非常慢 我在百度上搜到的大部分文章都是直接在 m2 settings xml 加入以下内容
  • Linux_网络项目_WEB服务器 设计CGI机制,与CGI处理数据

    文章紧跟之前web服务器返回静态网页 文章目录 CGI设计思路 设计CGI代码 CGI设计思路 CGI原理如下图 其中CGI程序可以使用任何后端语言进行编写 而服务器是可执行程序 而CGI程序也是可执行程序 可以创建子进程使用进程替换来实现
  • MySQL C API

    Mysql API数据结构 Mysql API中用到了很多结构体等数据类型 下面就简单说说常用的几个数据结构的含义 至于它们的定义鸡啄米就不贴了 大家可以到Mysql提供的mysql h头文件中查看 MYSQL 连接数据库前 必须先创建MY
  • 【小沐学Android】Android实现socket网络通信

    SOCKET网络通信系列文章链接如下 小沐学python 一 Python简介和安装 Python实现socket网络通信 C 实现socket网络通信 Windows Android实现socket网络通信 nodejs实现socket网
  • Opencv立体相机标定

    0 简要 立体相机标定是立体视觉深度测量的重要步骤 相机标定的精度很大程度上决定了深度的精度 因此掌握立体相机的标定算法和过程至关重要 由于相机标定原理可以在网上找到很多相关资料 因此本文不展开讲原理部分 感兴趣的同学可以移步到https
  • MySQL数据库学习——DQL语句的执行顺序

    1 查询年龄大于15的员工的姓名 年龄 并根据年龄进行升序排序 select name age from emp where age gt 15 order by age asc select e name e age from emp e
  • vim/vi常用命令集

    格式 指令 或指令 参数 指令解释 文件操作 vim vi 打开一个空文件 vim vi a txt 打开当前目录中的a txt文件 若文件不存在则创建一个名为a txt的文件 指定保存位置为当前目录 vim vi home a txt 打