Linux Vim教程(四):文本编辑与修改技巧

ops/2024/9/18 13:03:21/ 标签: vim, linux, 运维, 服务器, 编辑器, Linux Vim

目录

1. 插入模式与普通模式

1.1 插入模式

1.2 退出插入模式

2. 文本选择与复制粘贴

2.1 可视模式

2.2 复制与粘贴

3. 查找与替换

3.1 查找

3.2 替换

4. 删除与撤销

4.1 删除

4.2 撤销与重做

5. 高级文本编辑技巧

5.1 多行编辑

5.2 自动补全

5.3 宏录制与回放

6. 配置与插件

6.1 Vim配置

6.2 插件管理

7. 实用文本编辑技巧

7.1 快速移动

7.2 文本格式化

7.3 搜索与替换技巧

7.4 配置快捷键

8. Vim脚本与自动化

8.1 Vim脚本基础

8.2 自动化任务

9. 高级编辑技巧

9.1 多文件编辑

9.2 会话管理

9.3 自定义命令

10. 总结


Vim是一个功能强大且灵活的文本编辑器,广泛用于Linux环境中的代码编写和文本编辑。掌握Vim的文本编辑与修改技巧,可以显著提高工作效率和编辑体验。本文将详细介绍Vim的各种文本编辑与修改技巧,并通过实际代码示例帮助读者更好地理解和应用这些技巧。

1. 插入模式与普通模式

1.1 插入模式

插入模式是Vim中用于插入文本的模式。在普通模式下按下i键即可进入插入模式。以下是常用的插入模式命令:

  • i:在光标前插入
  • I:在行首插入
  • a:在光标后插入
  • A:在行尾插入
  • o:在当前行下方插入新行
  • O:在当前行上方插入新行
# 示例代码:插入模式
i      # 进入插入模式,在光标前插入
I      # 在行首插入
a      # 在光标后插入
A      # 在行尾插入
o      # 在当前行下方插入新行
O      # 在当前行上方插入新行

1.2 退出插入模式

按下Esc键可以从插入模式退出,回到普通模式。

2. 文本选择与复制粘贴

2.1 可视模式

Vim提供了可视模式用于选择文本。以下是进入可视模式的命令:

  • v:进入字符可视模式
  • V:进入行可视模式
  • Ctrl+v:进入块可视模式
# 示例代码:可视模式
v       # 字符可视模式
V       # 行可视模式
Ctrl+v  # 块可视模式

2.2 复制与粘贴

在可视模式下选择文本后,可以使用以下命令进行复制和粘贴:

  • y:复制选择的文本
  • d:剪切选择的文本
  • p:在光标后粘贴
  • P:在光标前粘贴
# 示例代码:复制与粘贴
v$y      # 选择到行尾并复制
Vyy      # 选择整行并复制
Ctrl+vjjy  # 选择块并复制
p        # 在光标后粘贴
P        # 在光标前粘贴

3. 查找与替换

3.1 查找

使用/命令进行文本查找,输入要查找的字符串后按Enter键。可以使用nN键在结果中跳转。

# 示例代码:查找
/word       # 查找"word"
n           # 跳转到下一个结果
N           # 跳转到上一个结果

3.2 替换

使用:s命令进行替换操作。以下是常用的替换命令:

  • :s/old/new/:在当前行替换第一个匹配
  • :s/old/new/g:在当前行替换所有匹配
  • :%s/old/new/g:在整个文件中替换所有匹配
# 示例代码:替换
:s/old/new/     # 在当前行替换第一个匹配
:s/old/new/g    # 在当前行替换所有匹配
:%s/old/new/g   # 在整个文件中替换所有匹配

4. 删除与撤销

4.1 删除

使用d命令删除文本。以下是常用的删除命令:

  • dd:删除当前行
  • dw:删除到下一个单词
  • d$:删除到行尾
  • d0:删除到行首
# 示例代码:删除
dd      # 删除当前行
dw      # 删除到下一个单词
d$      # 删除到行尾
d0      # 删除到行首

4.2 撤销与重做

使用u命令撤销上一步操作,使用Ctrl+r命令重做撤销的操作。

# 示例代码:撤销与重做
u        # 撤销
Ctrl+r   # 重做

5. 高级文本编辑技巧

5.1 多行编辑

使用块可视模式可以对多行进行编辑。以下是一些多行编辑的示例:

# 示例代码:多行编辑
Ctrl+v   # 进入块可视模式
jj       # 选择两行
I        # 在行首插入字符
Esc      # 退出插入模式,完成多行编辑

5.2 自动补全

Vim支持自动补全功能,可以使用Ctrl+nCtrl+p在建议列表中导航。

# 示例代码:自动补全
Ctrl+n   # 显示自动补全建议
Ctrl+p   # 在建议列表中向上导航

5.3 宏录制与回放

使用q命令录制宏,录制结束后按q键停止录制。使用@命令回放宏。

# 示例代码:宏录制与回放
qa       # 开始录制宏,并保存到寄存器a
q        # 停止录制
@a       # 回放宏

6. 配置与插件

6.1 Vim配置

Vim的配置文件是~/.vimrc,可以通过编辑该文件来定制Vim的行为和外观。以下是一些常用的配置示例:

# 示例代码:Vim配置
set number        # 显示行号
set autoindent    # 自动缩进
set tabstop=4     # Tab宽度为4个空格
set shiftwidth=4  # 自动缩进宽度为4个空格
set expandtab     # 将Tab转换为空格

6.2 插件管理

Vim有许多插件可以扩展其功能。常用的插件管理工具有Vundle和vim-plug。以下是使用vim-plug安装插件的示例:

# 示例代码:插件管理
" 安装vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" 编辑~/.vimrc文件,添加插件
call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree'    # 文件浏览器插件
Plug 'tpope/vim-fugitive'     # Git插件
call plug#end()" 安装插件
:PlugInstall

7. 实用文本编辑技巧

7.1 快速移动

使用以下命令可以快速移动光标:

  • H:移动到屏幕顶部
  • M:移动到屏幕中间
  • L:移动到屏幕底部
  • gg:移动到文件开头
  • G:移动到文件末尾
# 示例代码:快速移动
H       # 移动到屏幕顶部
M       # 移动到屏幕中间
L       # 移动到屏幕底部
gg      # 移动到文件开头
G       # 移动到文件末尾

7.2 文本格式化

使用=命令可以格式化文本,以下是一些格式化命令:

  • =:格式化当前行
  • gg=G:格式化整个文件
  • =:格式化选中的文本
# 示例代码:文本格式化
=       # 格式化当前行
gg=G    # 格式化整个文件
v$=     # 格式化选中的文本

7.3 搜索与替换技巧

在进行搜索与替换时,可以使用正则表达式来匹配复杂的模式。例如,以下命令将匹配所有以"foo"开头并以"bar"结尾的单词,并替换为"baz":

# 示例代码:搜索与替换技巧
:%s/\<foo.*bar\>/baz/g

7.4 配置快捷键

可以在~/.vimrc中配置快捷键,以提高编辑效率。以下是一些常用的快捷键配置示例:

# 示例代码:配置快捷键
nnoremap <C-s> :w<CR>             # Ctrl+s 保存文件
inoremap <C-c> <Esc>              # Ctrl+c 退出插入模式
vnoremap <C-c> "+y                # Ctrl+c 复制到系统剪贴板
nnoremap <C-v> "+p                # Ctrl+v 从系统剪贴板粘贴
nnoremap <C-t> :NERDTreeToggle<CR> # Ctrl+t 切换NERDTree文件浏览器

8. Vim脚本与自动化

8.1 Vim脚本基础

Vim脚本是一种用于扩展Vim功能的脚本语言,可以编写复杂的自动化任务和自定义命令。以下是一个简单的Vim脚本示例:

# 示例代码:Vim脚本
" 定义一个简单的Vim函数
function! SayHello()echo "Hello, Vim!"
endfunction" 映射快捷键调用函数
nnoremap <leader>h :call SayHello()<CR>

8.2 自动化任务

Vim脚本可以用于自动化常见的编辑任务。例如,以下脚本会自动将当前文件保存为备份:

# 示例代码:自动化任务
" 自动保存备份文件
autocmd BufWritePost * :call SaveBackup()function! SaveBackup()let backup_file = expand('%') . '.bak'execute 'w! ' . backup_fileecho "Backup saved as " . backup_file
endfunction

9. 高级编辑技巧

9.1 多文件编辑

Vim支持同时编辑多个文件。以下是一些多文件编辑的命令:

  • :e filename:打开文件
  • :bnext:bn:切换到下一个缓冲区
  • :bprev:bp:切换到上一个缓冲区
  • :split filename:vsplit filename:水平或垂直分割窗口并打开文件
# 示例代码:多文件编辑
:e file1.txt    # 打开file1.txt
:split file2.txt  # 水平分割窗口并打开file2.txt
:vsplit file3.txt  # 垂直分割窗口并打开file3.txt
:bn            # 切换到下一个缓冲区
:bp            # 切换到上一个缓冲区

9.2 会话管理

Vim可以保存和恢复编辑会话,以便在重新启动Vim时恢复上次的编辑状态。以下是会话管理的命令:

  • :mksession session.vim:保存会话
  • :source session.vim:恢复会话
# 示例代码:会话管理
:mksession session.vim  # 保存会话到session.vim
:source session.vim     # 恢复会话

9.3 自定义命令

Vim允许创建自定义命令,以简化常见的编辑任务。以下是创建自定义命令的示例:

# 示例代码:自定义命令
" 创建一个自定义命令清理尾随空格
command! CleanWhitespace :%s/\s\+$//e

10. 总结

本文详细介绍了Vim的文本编辑与修改技巧,包括插入模式与普通模式、文本选择与复制粘贴、查找与替换、删除与撤销、高级文本编辑技巧、配置与插件、Vim脚本与自动化以及高级编辑技巧。通过这些技巧,读者可以更高效地进行文本编辑和修改,提高工作效率。希望本文对您掌握Vim的使用有所帮助。


http://www.ppmy.cn/ops/86367.html

相关文章

云 IDE 你了解多少

IDE&#xff08;Intelligent Development Environment&#xff09; 对于软件开发者来说&#xff0c;是一个非常重要的工具。好用的 IDE 可以大幅提高开发效率&#xff0c;减少不必要的重复工作。 就目前而言&#xff0c;本地的 IDE 可能依然是主流的选择。但是&#xff0c;在本…

科研绘图系列:R语言组合热图和散点图

介绍 热图展示参与者的属性,散点图表示样本的时间跨度。 加载R包 library(tidyverse) library(ComplexHeatmap) library(circlize) library(cowplot)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度云盘链接: https://pan.baidu.com/s/1iEE9seTLdrrC3WDHJy…

mysql特殊字符、生僻字存储设置

mysql utf-8模式下&#xff0c;分为ut8mb3,utf8mb4&#xff0c;mb4是支持特殊字符、emoji表情的&#xff0c;mb3是不支持的。 报错信息&#xff1a; 1### Error updating database. Cause: java.sql.SQLException: Incorrect string value: \xF0\xA8\x92\x82\xE6\x95... fo…

Android小技巧:利用动态代理自动切换线程(续)

本文是针对上文Android小技巧&#xff1a;利用动态代理自动切换线程的一个补充&#xff0c;补充一种简单的实现方式。 上文中我们提到利用动态代理将对某个对象的方法调用自动切换到对应线程中去&#xff0c;只是探讨了可行性和局限&#xff0c;但如果每个功能都手动创建代理就…

数字信号||离散系统的冲激响应和阶跃响应(3)

实验三 离散系统的冲激响应和阶跃响应 一、实验目的 (1)加深对离散线性移不变(LSI)系统基本理论的理解&#xff0c;明确差分方程与系统函数之间的关系。 (2)初步了解用MATLAB语言进行离散时间系统研究的基本方法。 (3)掌握求解离散时间系统冲激响应和阶跃响应程序的编写方…

unity3d:TabView,UGUI多标签页组件,TreeView树状展开菜单

概述 1.最外层DataForm为空壳编辑数据用。可以有多个DataForm&#xff0c;例如福利DataForm&#xff0c;抽奖DataForm 2.Menu层为左边栏层&#xff0c;每个DataForm可以使用不同样式的MenuForm预制体 3.DataForm中使用ReorderList&#xff0c;可排列配置 4.有定位功能&#xf…

java: 错误: 无效的源发行版:17

错误现象&#xff1a; java: 错误: 无效的源发行版&#xff1a;17 背景&#xff1a;在配置一个springboot项目时候&#xff0c;报出这个错误&#xff0c;错误提示信息很简单&#xff0c;很模糊。 排查&#xff1a;百度后&#xff0c;推测大概率就是pom文件的配置问题&#xf…

保研面试408复习9——哈夫曼树和B树、资源分配图

文章目录 1.哈夫曼树生成过程步骤&#xff1a;示例&#xff1a; 2.B树3.B树4.资源分配图&#xff08;死锁预防&#xff09;资源分配图的构成资源分配图的使用死锁的预防和避免总结 1.哈夫曼树 哈夫曼树&#xff08;Huffman Tree&#xff09;是一种用于数据压缩的二叉树。它是根…

Python实现九九乘法表

Python实现九九乘法表 以下是一个使用Python编写的简单代码用于生成九九乘法表。 Python 代码 python for i in range(1, 10):j 1while j < i:print(f{j}*{i}{i * j}, end\t)j 1print()输出示例 运行上述代码将生成如下的九九乘法表&#xff1a; 1*11 1*22 2*24 1…

Vue3点击按钮实现跳转页面并携带参数

前提&#xff1a;有完整的路由规则 1.源页面 <template><div><h1>源页面</h1><!--通过js代码跳转--><template #default"scope"><button click"toTargetView(scope.row)">点击跳转携带参数</button><…

.NET开源、简单、实用的数据库文档生成工具

前言 今天大姚给大家分享一款.NET开源&#xff08;MIT License&#xff09;、免费、简单、实用的数据库文档&#xff08;字典&#xff09;生成工具&#xff0c;该工具支持CHM、Word、Excel、PDF、Html、XML、Markdown等多文档格式的导出&#xff1a;DBCHM。 支持的数据库 Sq…

Java面试八股之Spring容器的启动流程

Spring容器的启动流程 Spring容器的启动流程涉及一系列有序的操作&#xff0c;以确保容器正确初始化并准备好管理应用程序中的Bean。以下是一个详细的启动流程概述&#xff1a; 1. 加载配置&#xff1a; 资源定位&#xff1a;Spring容器首先需要确定配置资源的位置&#xff…

ObservableCollection新增数据前判断数据是否存在

public class MyDataModel {public int Id { get; set; }public string Name { get; set; }}public static void Main(){// 创建 ObservableCollectionObservableCollection<MyDataModel> myDataCollection new ObservableCollection<MyDataModel>{new MyDataMode…

STM32_RTOS学习笔记——1(列表与列表项)

总体RTOS笔记目录 一&#xff0c;列表与列表项&#xff08;本文&#xff09; 二&#xff0c;待定 视频参考&#xff1a;B站野火 一&#xff0c;C语言列表概念 列表就是C语言中的链表&#xff0c;链表就如同下面的衣架一样&#xff0c;需要的各种内容可以参考 C语言链表可…

【文化+科技,融合示范】探索数字媒体产业园区如何重塑行业格局,打造全球领先的数字内容生态圈

数字媒体产业园区作为数字经济的重要组成部分&#xff0c;正以其独特的魅力和创新力重塑行业格局&#xff0c;努力打造全球领先的数字内容生态圈。这一过程中&#xff0c;树莓集团正通过集聚优质资源、搭建创新平台、推动产业升级&#xff0c;为数字内容产业的发展提供了强有力…

HTML 基础知识

HTML (HyperText Markup Language) 是用于构建网页及其内容的代码。例如,内容可以在一组段落、项目符号列表或使用图像和数据表中进行结构化。正如标题所暗示的那样,本文将让您对 HTML 及其功能有一个基本的了解。 那么什么是HTML? HTML 是一种标记语言,用于定义内容的结…

文件系统基础 (二)——文件的物理结构

目录 一. 前言二. 连续(顺序)分配三. 链接分配隐式链接显式链接 三. 索引分配单级索引分配多级索引分配混合索引分配混合索引分配相关计算 五. 总结 一. 前言 文件的物理结构就是研究文件的实现&#xff0c;即文件数据在物理存储设备上是如何分布和组织的。 文件的分配方式&a…

day06 项目实践:router,axios

vue组件的生命周期钩子 今天几乎没有讲什么新内容&#xff0c;就是一起做项目&#xff0c;只有一个小小的知识点&#xff0c;就是关于vue组件的生命周期钩子&#xff0c;其中最重要的四个函数—— beforeCreate()&#xff1a;组件创建之间执行 created()&#xff1a;组件创建…

TypeScript入门

一、TypeScript概述 TypeScript 是 JavaScript 的一个超集&#xff0c;支持 ECMAScript 6 标准&#xff08;ES6 教程&#xff09;。 TypeScript 由微软开发的自由和开源的编程语言。 TypeScript 设计目标是开发大型应用&#xff0c;它可以编译成纯 JavaScript&#xff0c;编…