【Linux】VIM使用

2023-10-26

第一节 Vim常用操作


Vim没有菜单,只有命令。Vim的工作模式有三种:

第一种:命令模式 vi/vim+文件名 进入命令模式 不可以输入文字,只能识别命令
插入命令:
a:在光标所在字符后插入
i:在光标所在字符前插入
o:在光标下插入新行
A:在光标所在行尾插入
I:在光标所在行行首插入
O:在光标上插入新行
第二种:插入模式 按i/a/o进入,可以继续输入文字,按Esc退出
第三种:编辑模式 在命令模式下按:,即可进入 编辑模式 可以输入编辑命令 比如:保存并退出,加行号
定位命令:
:set nu 设置行号
:set nonu 取消行号
gg 到第一行
G 到最后一行
nG 到第n行
: n 到第n行 和上面一样的格式
$ 移动到行尾
0 移动到行首
删除命令:
x 删除光标所在处的字符
nx 删除光标所在处后n个字符
nd 删除光标所在行
ndd 删除n行
dG 删除光标所在行到文件末尾的内容
D 删除光标所在处到行尾内容
:n1,n2d 删除指定范围的行 n1-n2的行全部被删除
复制和剪切命令:
yy 复制当前行
nyy 复制当前行一下n行
dd 剪切当前行
ndd 剪切当前行以下n行
p 粘贴在当前光标所在行下
P 粘贴在当前光标所在行上
替换或取消命令:
r 替换光标所在处字符
R 从光标所在处开始替换字符,按Esc结束
u 取消上一不操作
搜索和搜索替换命令:
/string 搜索指定字符串string 与less命令操作类似
搜索时忽略大小写:set ic
搜索时不忽略大小写:set noic
n 搜索指定字符串的下一个出现位置
:%s/要替换的字符串/替换的新的字符串/g 不询问
把/g换成/c 进行询问确认
全文替换指定字符串
:n1,n2s/要替换的字符串/替换的新的字符串/g
在一定范围内替换指定字符串
保存和退出命令:
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 快捷键,保存修改退出
:q! 不保存修改退出
:wq! 保存修改并退出(只有文件所有者以及root可以使用)适合保存root只有只读权限的文件
第二节 Vim使用技巧
在Vim中有许多黑科技小技巧便于我们操作,我总结了以下几天最为方便的操作,以供大家学习:

:r !命令 当前的Vim文档导入命令执行结果
例子:
:r !date 直接把当前时间导入当前的Vim文档
map [快捷键] [触发命令] 定义快捷键
其中快捷键需要按ctrl+v+需要设定的键位,设定好之后颜色会变,比如想设定ctrl p为快捷键那么就按ctrl+v+p 会出现^P ,不能按shift+6出现的^,这两个虽然看起来一样但是颜色不一样
触发命令按需要执行的命令的先后顺序来排列,比如给脚本加注释#键就可以把[触发命令]设为I#
例子:
map ^P I# 给脚本行首加#注释
:n1,n2s/^/#/g 替换行首字符为#,连续行的注释,不过需先设置行号 :set nu
:n1,n2s/^#/ /g 取消注释
:n1,n2s/^/ \ / \ //g 给行首加// 需先设置行号 :set nu
因为系统无法识别太多的,所以需要在//每一条/前都加转义符\,\表达命令的正在含义,比如ls /etc 里面的文件会有颜色,但是\ls 就没有,他是表达执行ls真正含义不执行ls别名
ab [a内容][b内容]
例子:
ab mymail 1771566679@qq.com
替换命令,当你在vim文档中输入mymail时按回车或者空格会自动变1771566679@qq.com
即:会自动把b内容替换成a
非常实用的小技巧
有些时候在重启服务器之后,定义的快捷键会消失,这时候我们需要在用户的家目录下写配置文件,保存快捷键
root用户在 /root/.vimrc
其他用户在 /home/username/.vimrc在里面进行编辑,永久生效

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

【Linux】VIM使用 的相关文章

  • Python 读取命名为 PIPE

    我在 linux 中有一个命名管道 我想从 python 中读取它 问题在于 python 进程连续 消耗 一个核心 100 我的代码如下 FIFO var run mypipe os mkfifo FIFO with open FIFO
  • -s 和 -p 如何改变读取命令?

    我正在尝试解释这段代码 搜索谷歌看看这些命令的含义 但没有运气 我把我对每一行 块对我意味着什么的解释 如果我错了 请纠正我 我是 unix 命令新手 代码 bin bash input 1st command line argument
  • java.lang.SecurityException:权限拒绝:启动意图 { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]

    启动时出错activity 不幸的是 我认为它与该项目没有严格联系 因为该应用程序启动于genymotion模拟器 但不在物理设备上 当我跑步时adb devices与真实的连接后我得到 List of devices attached 0
  • 加载linux内核的基地址

    我对内核如何加载到内存有一些疑问 检查后 proc kallsyms我能够找到内核中各种符号的地址 cat proc kallsyms head n 10 00000000 t vectors start 80008240 T asm do
  • 使用Python子进程处理带括号的文件路径

    我要处理的文件的路径中包含括号 path dir file with parentheses txt 我正在尝试用 Python 处理它们 如下所示 subprocess call process s path shell True 但是
  • 调用 sdp_record_register() 时出现分段错误

    我正在尝试使用 BlueZ 在 SDP 中注册我的蓝牙服务 我跟随this http people csail mit edu albert bluez intro x604 html教程 代码编译成功 但当我运行它时 出现分段错误 即使是
  • gdb nostop SIGSEGV 在特定线程上

    我有一个程序故意在一个线程上出现段错误 但我有一个问题 另一个线程出现段错误 我想用 GDB 捕获它 我看到我可以 handle SIGSEGV nostop noprint 但我只想在故意这样做的线程上这样做 有可能吗 我会解释一下 我有
  • shell脚本不通过crontab运行,手动运行正常

    我尝试导出我的路径和变量 但 crontab 仍然不会运行我的脚本 我确信我做错了什么 我有一个运行 jar 文件的 shell 脚本 这无法正常工作 阅读周围后 我发现这通常是由于 cron 通过其自己的 shell 实例运行而导致路径不
  • 如何杀死 Linux 中特定端口上运行的进程?

    我尝试使用关闭tomcat shutdown sh来自雄猫 bin目录 但发现服务器没有正常关闭 因此我无法重新启动我的 tomcat 正在端口上运行8080 我想杀死正在运行的tomcat进程8080 我首先想要获得在特定端口 8080
  • MariaDB 10 CentOS 7 移动数据目录的问题

    CentOS 7 和 MariaDB 10 的全新 最小 安装 我有一个额外安装的镜像卷 我想将其用于数据目录 当 my cnf mysqld 被注释掉时 启动顺序正常并正常完成 我已经复制了数据 sudo cp R p var lib m
  • 如何在 Eclipse 中设置 Linux C++ 项目?

    我在 Linux 环境中有一个现有的 C 项目 想将其导入 Eclipse IDE 不确定我是否应该启动一个新的 Eclipse C 项目 或者是否有某种方法可以导入源文件 您可以 就地 创建一个新的 Eclipse C 项目 即 如果您在
  • 为什么函数 printk() 不使用逗号来分隔参数?

    一个例子printk call printk KERN INFO Log message n 也许这个问题更多地是关于C的 因为我之前从未见过C中的函数可以不用逗号分隔参数 这是如何运作的 编译器如何处理这些信息 由于日志级别是一个整数 而
  • 如何使用 devtoolset-8-gcc 安装 gcc8

    我使用的是 CentOS Linux 版本 7 3 1611 其中安装了 gcc 4 8 5 20150623 我正在寻找一种安装较新版本的 gcc 的方法 特别是 8 1 我找到了以下关于如何安装 gcc v7 的网站link 1 htt
  • 如何找出文件的 MIME 类型(Content-Type)?

    有没有办法找出 Linux bash 脚本中文件的 MIME 类型 或者称为 Content Type 我需要它的原因是 ImageShack 似乎需要它来上传文件 因为出于某种原因它会将 png 文件检测为application octe
  • 什么是二进制文件以及如何创建一个?

    我想创建一个表示整数的二进制文件 我认为该文件应该是4个字节 我用的是Linux 怎么做 另一个问题 如何将该文件的内容分配给 C 中的整数 在标准C中 fopen 允许模式 wb 写 和 rb 以二进制模式读取 因此 include
  • 如何从我的库中调用可执行文件中的函数?

    我有一个可执行文件和一个动态库 so 该库导出一些符号并且可执行文件成功调用它 但我想让库调用可执行文件的功能成为可能 我尝试在可执行文件中执行以下操作 test extern C void print const char str std
  • 我如何解释 meminfo 中的所有内存?

    我试图理解如何meminfo跟踪记忆 这是我正在看的内容 MemTotal 341596 kB MemFree 147288 kB Buffers 56 kB Cached 46752 kB SwapCached 0 kB Active 8
  • fork() & 内存分配行为

    我在一个禁用交换和禁用内存过量使用的系统上工作 假设我的进程当前消耗 100 MB 内存 而系统可用内存小于 100 MB 如果我执行 fork 它会失败 因为内核也尝试为子进程分配 100 MB 的空间吗 我读过 Linux 在分叉时使用
  • 如何以表格格式邮寄脚本输出

    我的脚本输出如下所示 当前结果 Filename Destname rowcount bytesize file1 default 1488 2248 file2 default 123 657 file3 default 123 456
  • 在 shell 中用字符串替换变量

    我将一个字符串作为参数传递给 shell 脚本 shell 脚本应该告诉我传递的参数是否是变量 像这样的东西 if z 1 then echo yes 1 is a variable and its value is 1 fi 但这给了我严

随机推荐

  • 电子科技大学人工智能期末复习笔记(二):MDP与强化学习

    目录 前言 期望最大搜索 Expectimax Search 马尔科夫决策 MDP offline 超重点 先来看一个例子 基本概念 政策 Policy 折扣 Discounting 如何停止循环 价值迭代 Value Iteration
  • LeetcodeSQL入门——知识点总结(选择/排序/修改/字符串处理/正则)

    LeetcodeSQL入门 选择 排序 修改 字符串处理 选择 sql语言对于空值的判断是IS NULL或者IS NOT NULL eg 某网站包含两个表 Customers 表和 Orders 表 编写一个 SQL 查询 找出所有从不订购
  • 剑指Offer 40

    使用优先队列 将非负数变为非正数存储 结果变成非负数 class Solution public int getLeastNumbers int arr int k if k 0 return new int 0 int nums new
  • SequenceInputStream----合并流

    这个类的作用是将多个输入流合并成一个输入流 通过SequenceInputStream类包装后形成新的一个总的输入流 1 SequenceInputStream InputStream s1 InputStream s2 和Sequence
  • 差分方程与滤波的实现

    1 滤波基础知识 2 差分方程 3 IIR滤波器 1 直接I型IIR滤波器 2 直接II型IIR滤波器
  • 备战2023蓝桥国赛-移动服务

    题目描述 解析 这道题我想复杂了 一开始我是这样想的 设dp i j 表示按顺序满足到第i个请求时 最初在j号点的人到达第i个请求的位置的情况下的最小花费 state i j 表示按顺序满足到第i个请求时 最初在j号点的人到达第i个请求的位
  • Typescript 之接口 interface(详解)

    一 interface的基本含义 TS新增了一个重要概念 接口 分为对象类型接口和函数类型接口 接口可以约束对象 函数 类的结构和类型 是一种代码协作必须遵守的契约 Interface 是一种描述对象或函数的东西 你可以把它理解为形状 一个
  • 使用github免费搭建个人博客后的写作及上传说明

    项目地址 我的博客github项目地址 个人博客网站 欢迎进入我的博客 本篇文章介绍如何在博客搭建好的基础上 使用它 使用它来写博客 更新博客页面 第一种方法 本地编辑 上传到github 首先 从我的github个人博客项目仓库克隆出该工
  • vscode中CommandNotFoundError: Your shell has not been properly configured to use ‘conda active的可能解决方法

    一 问题背景 如题 出现该问题后 我首先通过搜索尝试了conda init 用管理员身份运行powershell进行权限配置等方法无果 python之 vscode中激活conda虚拟环境报错或者打开虚拟环境失败 if using cond
  • 滑动时间窗口的思想和实现,环形数组,golang

    固定时间窗口 在开发限流组件的时候 我们需要统计一个时间区间内的请求数 比如以分钟为单位 所谓固定时间窗口 就是根据时间函数得到当前请求落在哪个分钟之内 我们在统计的时候只关注当前分钟之内的数量 即 0s 60s 因为流量并不是均匀的 所以
  • 微软RIA服务2009年7月预览版官方手册第2节(翻译:戴石麟)

    2 理解N层Silverlight应用项目 微软 NET RIA服务通过结合ASP NET和Silverlight平台来简化传统N层应用模式 应用逻辑写在中间层上 通过查询 更新 定制方法和服务操作来控制对数据的访问 NET RIA服务特性
  • Verilog入门学习笔记:Verilog基础语法梳理

    无论是学IC设计还是FPGA开发 Verilog都是最基本 最重要的必备技能 但任何一门编程语言的掌握都需要长期学习 并不是简简单单的随便读几本书 随便动动脑筋那么简单 Verilog是一门基于硬件的独特语言 由于它最终所实现的数字电路 具
  • netstat详解

    netstat是控制台命令 是一个监控TCP IP网络的非常有用的工具 它可以显示路由表 实际的网络连接以及每一个网络接口设备的状态信息 netstat可以用于显示与IP TCP UDP和ICMP协议相关的统计数据 一般用于检验本机各端口的
  • vb wor转存html,利用VB操作WORD的基本方法

    利用VB操作WORD的基本方法 通过查阅资料 自我实践 经实验通过 先引用word Application Dim MyWord As Word Application Dim MyWordBook As Word Document Set
  • Numpy:基础数据结构

    1 数组的基本属性 import numpy as np ar np array 1 2 3 4 5 6 7 print ar 输出数组 注意数组的格式 中括号 元素之间没有逗号 和列表区分 print ar ndim 输出数组维度的个数
  • Python @函数装饰器及用法(超级详细)转

    Python 内置的 3 种函数装饰器 分别是 staticmethod classmethod 和 property 其中 staticmethod classmethod 和 property 都是 Python 的内置函数 那么 我们
  • layui子弹框调用父弹框方法

    var thisFrame parent window document getElementById LAY layuiStampDuty1 getElementsByTagName iframe 0 id 获取父级弹框id值 var d
  • 【20220412】文献翻译4:交互中的手势和语言概述

    Gesture and speech in interaction An overview 1 简介 2 什么是共同语言 同声传译 手势 2 1 用手比划 2 2 用头做动作 3 语音和手势是交互的 3 1 交际环境中的手势 3 2 传递意
  • 双向链表

    双向就意味着对于每一个元素 都有两个方向的指向 因此从以下几个方面阐述双向链表 重要方法分析 全部代码 一 重要方法分析 这里的链表实现了我博客中的接口 ILinkedList 与结点 LinkedNode 具体的博客地址 http blo
  • 【Linux】VIM使用

    第一节 Vim常用操作 Vim没有菜单 只有命令 Vim的工作模式有三种 第一种 命令模式 vi vim 文件名 进入命令模式 不可以输入文字 只能识别命令 插入命令 a 在光标所在字符后插入 i 在光标所在字符前插入 o 在光标下插入新行