Linux Vim教程(二):基本命令和操作
目录
1. 进入和退出Vim
1.1 启动Vim
1.2 退出Vim
2. 模式切换
2.1 切换到插入模式
2.2 切换到普通模式
2.3 切换到命令模式
2.4 切换到可视模式
3. 移动光标
4. 编辑文本
4.1 插入和追加文本
4.2 删除文本
4.3 复制和粘贴文本
4.4 撤销和重做
5. 搜索和替换
5.1 搜索文本
5.2 替换文本
6. Vim配置
6.1 配置文件
6.2 安装插件
7. Vim脚本
7.1 编写简单的Vim脚本
7.2 创建自定义命令
8. 代码示例
8.1 自动完成配置
8.2 文件浏览器配置
9. Vim的高级操作
9.1 多文件编辑
9.2 使用窗口和标签页
9.3 宏录制和回放
9.4 自定义键映射
10. 总结
Vim以其强大的编辑功能和灵活的操作方式著称,是许多程序员和系统管理员的首选编辑器。本文将深入探讨Vim的基本命令和操作,帮助你掌握这款强大的文本编辑器的基本用法。通过学习Vim的基本命令和操作,你将能够高效地编辑文本文件,提高工作效率。
1. 进入和退出Vim
1.1 启动Vim
要启动Vim,只需在终端中输入vim
命令即可。你可以指定要编辑的文件名,也可以直接启动Vim而不指定文件名。
vim filename
如果文件存在,Vim将打开该文件;如果文件不存在,Vim将创建一个新的文件。
1.2 退出Vim
退出Vim有多种方式,以下是几种常用的方法:
:q
:退出Vim。如果文件已被修改,Vim会提示保存修改。:q!
:强制退出Vim,不保存修改。:wq
或:x
:保存文件并退出Vim。
2. 模式切换
Vim有几种不同的模式,每种模式有不同的功能:
- 普通模式(Normal mode):这是Vim的默认模式,可以在此模式下执行各种命令。
- 插入模式(Insert mode):在此模式下可以输入文本。
- 命令模式(Command mode):在此模式下可以输入以
:
开头的命令。 - 可视模式(Visual mode):在此模式下可以选择文本块进行操作。
2.1 切换到插入模式
要切换到插入模式,可以使用以下几种命令:
i
:在光标前插入文本。I
:在行首插入文本。a
:在光标后插入文本。A
:在行尾插入文本。o
:在当前行下方新建一行并插入文本。O
:在当前行上方新建一行并插入文本。
2.2 切换到普通模式
在插入模式下,可以按Esc
键切换回普通模式。
2.3 切换到命令模式
在普通模式下,可以按:
键切换到命令模式,然后输入命令并按Enter
键执行。
2.4 切换到可视模式
在普通模式下,可以使用以下命令切换到可视模式:
v
:进入可视模式。V
:进入可视行模式。Ctrl-v
:进入可视块模式。
3. 移动光标
在普通模式下,可以使用各种命令移动光标:
h
:左移一个字符。j
:下移一行。k
:上移一行。l
:右移一个字符。w
:移动到下一个单词的开头。b
:移动到前一个单词的开头。e
:移动到当前或下一个单词的结尾。0
:移动到行首。$
:移动到行尾。gg
:移动到文件开头。G
:移动到文件结尾。
4. 编辑文本
4.1 插入和追加文本
i
:在光标前插入文本。a
:在光标后插入文本。o
:在当前行下方新建一行并插入文本。
4.2 删除文本
x
:删除光标所在的字符。dw
:删除光标后的一个单词。dd
:删除当前行。d$
:删除到行尾。d0
:删除到行首。
4.3 复制和粘贴文本
yy
:复制当前行。yw
:复制一个单词。p
:在光标后粘贴。P
:在光标前粘贴。
4.4 撤销和重做
u
:撤销上一步操作。Ctrl-r
:重做上一步撤销的操作。
5. 搜索和替换
5.1 搜索文本
/pattern
:向前搜索模式。?pattern
:向后搜索模式。n
:跳转到下一个匹配项。N
:跳转到上一个匹配项。
5.2 替换文本
:s/old/new
:将当前行中的第一个old替换为new。:s/old/new/g
:将当前行中的所有old替换为new。:%s/old/new/g
:将整个文件中的所有old替换为new。:%s/old/new/gc
:在整个文件中交互式地将所有old替换为new。
6. Vim配置
6.1 配置文件
Vim的配置文件是~/.vimrc
,可以在该文件中添加自定义配置来改变Vim的行为。例如:
" 启用行号
set number" 设置缩进
set tabstop=4
set shiftwidth=4
set expandtab" 启用语法高亮
syntax on
6.2 安装插件
Vim支持使用插件来扩展其功能。以下是使用Vundle
插件管理器安装插件的示例:
- 安装Vundle:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
- 在
~/.vimrc
中添加Vundle配置:
set nocompatible " be iMproved, required
filetype off " required" 设置Vundle插件目录
set rtp+=~/.vim/bundle/Vundle.vimcall vundle#begin()
" 必须的Vundle插件
Plugin 'VundleVim/Vundle.vim'" 其他插件
Plugin 'scrooloose/nerdtree'call vundle#end() " required
filetype plugin indent on " required
- 启动Vim并安装插件:
:PluginInstall
7. Vim脚本
Vim脚本是一种用于扩展Vim功能的脚本语言。通过编写Vim脚本,你可以实现自动化任务、创建自定义命令和映射键。
7.1 编写简单的Vim脚本
以下是一个简单的Vim脚本示例,用于在保存文件时自动删除行尾空白字符:
function! TrimTrailingWhitespace()let l:save = winsaveview()%s/\s\+$//ecall winrestview(l:save)
endfunctionautocmd BufWritePre * call TrimTrailingWhitespace()
7.2 创建自定义命令
你可以使用command
命令创建自定义命令。例如,创建一个自定义命令Hello
,打印一条消息:
command! Hello echo "Hello, Vim!"
8. 代码示例
8.1 自动完成配置
以下是一个简单的自动完成配置示例,使用了YouCompleteMe
插件:
" 安装YouCompleteMe插件
Plugin 'Valloric/YouCompleteMe'" 启用YouCompleteMe
let g:ycm_global_ycm_extra_conf = '~/.vim/.ycm_extra_conf.py'" 启用语法检查
let g:ycm_seed_identifiers_with_syntax = 1" 启用自动补全
let g:ycm_complete_in_comments = 1
let g:ycm_complete_in_strings = 1
let g:ycm_collect_identifiers_from_comments_and_strings = 1
let g:ycm_min_num_of_chars_for_completion = 2
let g:ycm_cache_omnifunc = 0
8.2 文件浏览器配置
以下是一个文件浏览器配置示例,使用了NERDTree
插件:
" 安装NERDTree插件
Plugin 'scrooloose/nerdtree'" 映射键绑定
map <C-n> :NERDTreeToggle<CR>" 启动时打开NERDTree
autocmd vimenter * NERDTree
9. Vim的高级操作
9.1 多文件编辑
在编写代码或处理文本文件时,往往需要同时编辑多个文件。Vim提供了一些方便的命令来处理多文件编辑。
:e filename
:编辑一个新文件。:bnext
或:bn
:切换到下一个缓冲区。:bprev
或:bp
:切换到上一个缓冲区。:bd
:删除当前缓冲区。
9.2 使用窗口和标签页
Vim支持使用窗口和标签页来管理多个文件。
:split
或:sp
:水平分割窗口。:vsplit
或:vsp
:垂直分割窗口。Ctrl-w w
:切换窗口。:tabnew filename
:打开新标签页。:tabnext
或:tabn
:切换到下一个标签页。:tabprev
或:tabp
:切换到上一个标签页。:tabclose
或:tabc
:关闭当前标签页。
9.3 宏录制和回放
宏是Vim中一个非常强大的功能,可以帮助你自动化重复的任务。你可以录制一组命令并多次回放这些命令。
q{register}
:开始录制宏,register
是一个字母,用于保存宏。- 执行一系列命令。
q
:停止录制宏。@{register}
:回放宏。@@
:回放上一个宏。
9.4 自定义键映射
你可以通过自定义键映射来简化常用的操作。例如,以下是一些常用的键映射配置:
" 将 jk 映射为 Esc
inoremap jk <Esc>" 将 <C-s> 映射为保存文件
nnoremap <C-s> :w<CR>
inoremap <C-s> <Esc>:w<CR>a" 将 <C-p> 映射为打开文件浏览器
nnoremap <C-p> :NERDTreeToggle<CR>
10. 总结
本章介绍了Vim的基本命令和操作,包括进入和退出Vim、模式切换、光标移动、文本编辑、搜索和替换、Vim配置、Vim脚本、自动完成配置、文件浏览器配置、多文件编辑、使用窗口和标签页、宏录制和回放、自定义键映射等内容。掌握这些基本命令和操作,你将能够更高效地使用Vim进行文本编辑,提高工作效率。
相关文章:
Linux Vim教程(二):基本命令和操作
目录 1. 进入和退出Vim 1.1 启动Vim 1.2 退出Vim 2. 模式切换 2.1 切换到插入模式 2.2 切换到普通模式 2.3 切换到命令模式 2.4 切换到可视模式 3. 移动光标 4. 编辑文本 4.1 插入和追加文本 4.2 删除文本 4.3 复制和粘贴文本 4.4 撤销和重做 5. 搜索和替换 5.…...
【大模型基础】4.1 数据挖掘(待)
一、什么是文本挖掘? 文本挖掘指的是从文本数据中获取有价值的信息和知识,它是数据挖掘中的一种方法。文本挖掘中最重要最基本的应用是实现文本的分类和聚类,前者是有监督的挖掘算法,后者是无监督的挖掘算法。 二、文本挖掘的作用是什么? 能够从文本数据中获取有价值的…...
Jupyter Notebook与机器学习:使用Scikit-Learn构建模型
Jupyter Notebook与机器学习:使用Scikit-Learn构建模型 介绍 Jupyter Notebook是一款强大的交互式开发环境,广泛应用于数据科学和机器学习领域。Scikit-Learn是一个流行的Python机器学习库,提供了简单高效的工具用于数据挖掘和数据分析。本…...
IMU提升相机清晰度
近期,一项来自北京理工大学和北京师范大学的团队公布了一项创新性的研究成果,他们将惯性测量单元(IMU)和图像处理算法相结合,显著提升了非均匀相机抖动下图像去模糊的准确性。 研究团队利用IMU捕捉相机的运动数据&…...
掌握SQL Server性能监控:自定义性能计数器的实现
掌握SQL Server性能监控:自定义性能计数器的实现 在数据库管理中,监控数据库性能是确保系统稳定运行的关键。SQL Server提供了丰富的性能监控工具,但有时这些工具可能无法满足特定的监控需求。这时,自定义性能计数器就显得尤为重…...
jdk1.8 List集合Stream流式处理
jdk1.8 List集合Stream流式处理 一、介绍(为什么需要流Stream,能解决什么问题?)1.1 什么是 Stream?1.2 常见的创建Stream方法1.3 常见的中间操作1.4 常见的终端操作 二、创建流Stream2.1 Collection的.stream()方法2.2 数组创建流2.3 静态工厂…...
leetcode位运算(1720. 解码异或后的数组)
前言 经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。后续开始专项练习。 描述 未知 整数数组 arr 由 n 个非负整数组成。 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] arr[i] XOR arr[i 1] 。例如&am…...
Android 性能优化之卡顿优化
文章目录 Android 性能优化之卡顿优化卡顿检测TraceView配置缺点 StricktMode配置违规代码 BlockCanary配置问题代码缺点 ANRANR原因ANRWatchDog监测解决方案 Android 性能优化之卡顿优化 卡顿检测 TraceViewStricktModelBlockCanary TraceView 配置 Debug.startMethodTra…...
mac电脑显示隐藏文件
方法一: 第一步:打开「终端」应用程序。 第二步:输入如下命令: defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder 第三步:按下「Return」键确认。 现在你将会在 Finder 窗口中…...
深度学习之基础知识整理
现在大语言模型很火,但它的基础仍然是以神经网络为基础的深度学习,不懂神经网络,不了解深度学习,对于大语言模型的二次开发也是整不明白。 那到底需要了解哪些知识?才能看懂深度学习/神经网络的基础模型,想…...
R语言学习笔记9-数据过滤-分组-融合
R语言学习笔记9-数据过滤-分组-融合 数据过滤基础数据过滤条件筛选数据使用dplyr包进行数据操作select 函数filter 函数subset函数 数据分组使用split()进行数据分组使用dplyr包进行数据分组使用data.table包进行数据分组 数据融合使用merge()进行数据融合使用dplyr包进行数据融…...
GESP CCF C++ 八级认证真题 2024年6月
第 1 题 GESP活动期间,举办方从获胜者ABCDE五个人中选出三个人排成一队升国旗,其中A不能排在队首,请问 有多少种排法? A.24 B.48 C.32 D.12 第 2 题 7进制数235转换成3进制数是( )。 A. 11121 B. 11…...
Spring Boot 单元测试什么时候需要添加 @RunWith
建立 Spring Boot 单元测试方法一般依赖于 JUnit4 或 JUnit5 框架。 在高版本的 Spring Boot 中,一般默认用的是 JUnit5。此时通过添加 SpringBootTest 注解,即可成功注入相关的 bean 对象,并进行测试。 import org.junit.jupiter.api.Test…...
鸿蒙OpenHarmony Native API【HiLog】
HiLog Overview Description: HiLog模块实现日志打印功能。 开发者可以通过使用这些接口实现日志相关功能,输出日志时可以指定日志类型、所属业务领域、日志TAG标识、日志级别等。 syscap SystemCapability.HiviewDFX.HiLog Since: 8 Summary Files File …...
Pycharm 和虚拟环境的那些事?
背景: 我既有 python 又有Anaconda Pycharm新建虚拟环境: 只说两种方式 通过Virualenv Environment新建: 这里我们勾选上 Make available to all projects ,之后点击🆗 然后可以发现只有非常少的包,因为没有勾选继承 编译器的包 创建的虚拟环境一般目录如下&…...
rancher2里面的containerd的使用
rancher2使用containerd了,在node上去跑docker命令找不到以前的那些pod了,查了很久才设置好crictl的配置 kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP O…...
Python数据风险案例54——人工智能热门概念股爬虫分析其价值(三因子模型)
案例背景 人工智能概念如火如荼的夏天,在这个2024年,我觉得需要提早布局一下这个概念。所以我们找一下A股里面人们的人工智能概念股,然后分析他们的数据应用三因子模型,也就是最经典的资本资产定价模型的衍生版去研究他们各自的投…...
【HarmonyOS开发】Navigation使用
简介 Navigation是路由容器组件,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。适用于模块内和跨模块的路由切换。 在页面跳转时,应该使用页面路由router,在页面内的页面跳转时,建议使用Navigation达到更好的转场动效…...
计算机网络参考模型与5G协议
目录 OSI七层参考模型OSI模型vsTCP/IP模型TCP/IP协议族的组成 OSI七层参考模型 分层功能应用层网络服务与最终用户的一个接口表示层数据的表示,安全,压缩会话层建立,管理,终止会话传输层定义传输数据的协议端口号,以及流控和差错校验网络层进行逻辑地址寻址,实现不同网路之间的…...
docker自建rustdesk-server远程桌面
rustdesk简介 RustDesk 是一款可以平替 TeamViewer 的开源软件,旨在提供安全便捷的自建方案。 RustDesk 是一款功能齐全的远程桌面应用,具有以下特性: 支持 Windows、macOS、Linux、iOS、Android、Web 等多个平台。支持 VP8 / VP9 / AV1 …...
海外抖音黑屏是网络问题还是硬件问题?
随着海外抖音(TikTok)在全球范围内的普及,越来越多的用户开始体验这一短视频社交平台。然而,不少用户在使用过程中遇到了黑屏问题,这让人不禁疑惑:这究竟是网络问题还是硬件问题? 首先…...
为了实现接口缓存,专门写了个缓存库 f-cache-memory
问题起因 起因是某次发版之后,服务器接口压力过大,当场宕机,排查之后发现有个接口在首页被调十来次(六七年的老项目了,都是泪呀),后端反馈这个接口的sql很复杂,很耗性能,…...
actual combat 35 —— es
一、windows中es执行步骤 参考:https://blog.csdn.net/qq_21197507/article/details/115076913 下es安装包下es前端gitHub代码,然后npm -i安装,npm run start 启动安装kibana 二、遇到的问题 1. 第二步安装前端代码依赖报错 npm ERR! co…...
android R ext4 image打包脚本介绍
一、Android R打包指令使用介绍 (1)mkuserimg_mke2fs #./mkuserimg_mke2fs --help usage: mkuserimg_mke2fs [-h] [--android_sparse] [--journal_size JOURNAL_SIZE][--timestamp TIMESTAMP] [--fs_config FS_CONFIG][--product_out PRODUCT_OUT][--b…...
美式键盘 QWERTY 布局的来历
注:机翻,未校对。 The QWERTY Keyboard Is Tech’s Biggest Unsolved Mystery QWERTY 键盘是科技界最大的未解之谜 It’s on your computer keyboard and your smartphone screen: QWERTY, the first six letters of the top row of the standard keybo…...
ETL数据同步之DataX,附赠一套DataX通用模板
今天跟大家分享数据同步datax的模板,小伙伴们简单直接借鉴使用。 还记得上一篇关于大数据DS调度工具的分享嘛? 主流大数据调度工具DolphinScheduler之数据ETL流程-CSDN博客 里面的核心就是采用了DATAX的数据同步原理。 一,什么是DataX D…...
[论文笔记] CT数据配比方法论——1、Motivation
我正在写这方面的论文,感兴趣的可以和我一起讨论!!!!!! Motivation 1、探测原有模型的配比: 配比 与 ppl, loss, bpw, benchmark等指标 之间的关系。 2、效果稳定的配比:配比 与 模型效果 之间的规律。 Experiments 1、主语言(什么语言作为主语言,几种主语言?…...
某4G区域终端有时驻留弱信号小区分析
这些区域其实是长时间处于连接态的电信卡4G终端更容易出现。 出现问题时都是band1 100频点下发了针对弱信号的1650频点的连接态A4测量事件配置(其阈值为-106)。而这个条件很容易满足,一旦下发就会切到band3 1650频点。 而1650频点虽然下发ban…...
【体外诊断】ARM/X86+FPGA嵌入式计算机在免疫分析设备中的应用
体外诊断 信迈提供基于Intel平台、AMD平台、NXP平台的核心板、2.5寸主板、Mini-ITX主板、4寸主板、PICO-ITX主板,以及嵌入式准系统等计算机硬件。产品支持GAHDMI等独立双显,提供丰富串口、USB、GPIO、PCIe扩展接口等I/O接口,扩展性强…...
Linux上启动和停止jar
linux 后台运行jar 在Linux系统中,要想让jar包在后台运行,可以使用nohup命令和&符号。nohup命令可以使进程在后台不受挂起信号影响的执行,而&符号则是将任务放入后台执行。 以下是一个简单的命令示例,它将启动一个jar包…...
做地方旅游网站/广州seo网站推广平台
Swift语言开发实战高级教程:http://edu.51cto.com/course/course_id-2337.html第一部Swift语言实战开发视频教程, 将Swift语法与iOS开发相结合,不再枯燥的讲解语法。用最短的时间达到最好的效果。所有语法点均结合具体的iOS控件和开发技术,学…...
漳州做网站建设/搜索引擎关键词排名优化
DB2查看VIEW定义的SQL文。 select VD.text as V_DLL from syscat.VIEWS as VD where VD.VIEWSCHEMA DB2ADMIN and VD.VIEWNAME V_DEPT; 字段V_DLL就是VIEW的DLL了。...
百度推广 帮做网站吗/搜索引擎优化方案案例
记录 flutter 环境安装问题 问题描述 前提是 flutter 安装好,jdk 安装好,Android Studio 安装完成 flutter doctor 查看环境缺失,如下: [✓] Flutter (Channel stable, v1.7.8hotfix.4, on Mac OS X 10.14.6 18G95, localezh-H…...
前端微信小程序开发/东莞营销网站建设优化
git 本地库推送远程库 版本冲突的解决方法参考文章: (1)git 本地库推送远程库 版本冲突的解决方法 (2)https://www.cnblogs.com/ylemzhang/p/4326572.html 备忘一下。...
二手书网站建设日程表/天津seo托管
关键词 并行开发 代码复用 关注点分离经典的MVC架构模式MVC架构模式是经典设计模式中的经典,是一种编程的方法论。具有高度抽象的特征,经典MVC用简单的定义体现出解决复杂通用问题的办法,只有不断思考和体会才能用来解决不同情况下程序设计所…...
做企业的网站都要准备什么/爱站网关键词工具
//public——说明方法main()是公有方法,它可以被任何方法访问,包括java解释器。实际上,main()方法只被java解释器调用,其他方法一般不调用它。//static——告诉编译器main()方法是静态的,可用在类Demo中,不…...