Linux Vim教程(二):基本命令和操作

server/2024/10/22 14:25:27/

目录

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插件管理器安装插件的示例:

  1. 安装Vundle:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
  1. ~/.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
  1. 启动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进行文本编辑,提高工作效率。


http://www.ppmy.cn/server/90120.html

相关文章

CSS技巧专栏:一日一例 11 -纯CSS实现多彩渐变按钮系列特效

CSS技巧专栏:一日一例 11 -纯CSS实现多彩渐变按钮系列特效 本篇,推荐给你几个按钮,先看一下图片 本例图片 案例分析 这是一个系列的按钮,它们具有共同的特点: 底层按钮层,具有一个彩色的渐变边框,上层是依据hover效果需要,可以是渐变,可以时白色。 鼠标hover效果…

greenplum pg_stat_activity说明

视图pg_stat_activity每行详细显示服务器每个进程&#xff0c;其中包含有关相关用户会话和查询的详细信息。除非关闭了参数stats_command_string&#xff0c;否则报告当前查询数据的列是可用的。此外&#xff0c;只有当检查视图的用户是超级用户或与拥有所报告进程的用户相同时…

html+css 实现水波纹按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

关于gateway与oauth2的兼容问题处理

文章目录 前言问题解决方案手写RPC采用spring feign调用采用JWT解析 前言 令牌鉴权方案的选择上&#xff0c;比较流行的有spring security 自定义的令牌&#xff08;比如JWT令牌&#xff09;、spring securityoauth2&#xff0c;假如使用了spring security oauth2的方案&…

【Rust日报】跨平台高性能计算语言扩展CubeCL

[rust is best]10 亿行挑战方案 作者尝试优化 Rust 中「10 亿行挑战」的解决方案。从原始的 5 分钟优化到了 9 秒。 作者的主要目标是创建一段简单、可维护且生产就绪的代码&#xff0c;而且没有使用不安全的操作。以下是一些关键经验&#xff1a; 使用 --release 优化构建避免…

【Android】安卓四大组件之广播知识总结

文章目录 动态注册使用BroadcastReceiver监听Intent广播注册Broadcast Receiver 静态注册自定义广播标准广播发送广播定义广播接收器注册广播接收器 有序广播修改发送方法定义第二个广播接收器注册广播接收器广播截断 使用本地广播实践-强制下线使用ActivityCollector管理所有活…

LLM 大语言模型显存消耗估计与计算

LLM 大语言模型显存消耗估计与计算 1. LLM 大语言模型开发流程 在大模型&#xff08;如 LLaMA-7B、GPT-3 等&#xff09;的开发、训练、微调、推理和部署过程中&#xff0c;各个阶段的流程都涉及多个复杂的步骤。以下是详细的流程描述&#xff0c;涵盖训练和微调的区别&#…

MySQL数据库(基础篇)

&#x1f30f;个人博客主页&#xff1a;心.c 前言&#xff1a;今天讲解的是MySQL的详细知识点的&#xff0c;希望大家可以收货满满&#xff0c;话不多说&#xff0c;直接开始搞&#xff01; &#x1f525;&#x1f525;&#x1f525;文章专题&#xff1a;MySQL &#x1f63d;感…