vi和vim是什么
vi
和vim
是两款流行的文本编辑器,广泛用于Unix和类Unix系统中。它们以其强大的功能和灵活的编辑能力而闻名,特别是在编程和系统管理中非常受欢迎。
vi(Visual Interface)
vi
是最初的文本编辑器之一,由Bill Joy在1976年创建,是早期Unix系统的标准组件。vi
的主要特点是它的模式编辑功能,有以下三种基本模式:
- 命令模式:这是
vi
启动后的默认模式。在此模式下,你可以使用键盘快捷键执行复制、粘贴、定位光标、删除文本等操作。 - 插入模式:在此模式下,可以输入文本。从命令模式按
i
(insert)可以进入插入模式。 - 末行模式:通过在命令模式下按下冒号(
:
)进入,用于执行保存、退出、查找替换等命令。
vi
由于其简洁和高效,长久以来一直是许多程序员和系统管理员的首选编辑器。
vim(Vi IMproved)
vim
是从vi
发展而来的一个版本,由Bram Moolenaar在1991年发布。vim
在vi
的基础上增加了很多功能,包括但不限于:
- 可视模式:允许用户选中文本块进行复制、删除等操作。
- 语法高亮:对源代码等文件支持自动语法高亮。
- 多窗口和标签页:可以在一个
vim
会话中打开多个文件。 - 可扩展性:支持通过插件来扩展功能,有丰富的插件生态系统。
- 撤销树:比传统的撤销更灵活,可以撤销历史中的任何一步操作。
vim的模式
Vim 的模式主要分为以下几种,每种模式都有其独特的用途和功能:
-
普通模式(Normal Mode)
这是 Vim 启动后的默认模式。在这个模式下,你可以执行各种命令来操作文本,如移动光标、复制、粘贴、删除文本等。普通模式的每个按键都是一个命令,例如h
(左移光标)、j
(下移光标)、k
(上移光标)、l
(右移光标)等。 -
插入模式(Insert Mode)
在此模式下,可以直接输入文本。从普通模式按i
进入插入模式,在文本中的当前光标位置开始输入。其他方式进入插入模式还包括a
(在光标后插入)、o
(在当前行下方新开一行并插入)等。 -
可视模式(Visual Mode)
用于选择文本块。从普通模式按v
进入可视模式,然后可以移动光标来选择文本区域。选择的文本可以被复制、删除或者进行其他操作。此外,还有可视行模式(按V
进入)和可视块模式(按Ctrl-v
进入),分别用于选择整行或矩形文本块。 -
命令行模式(Command-line Mode)
通过在普通模式下按下冒号:
进入。在这个模式下,可以输入命令来执行更复杂的操作,如保存文件(:w
)、关闭文件(:q
)、搜索替换等。 -
替换模式(Replace Mode)
从普通模式按R
进入,可以替换光标之后的文本而不是插入新的文本。这类似于打字机的替换功能,原有的文本会被新输入的内容替换。
普通模式快捷键
光标移动
- Shift + $:移动光标到当前行的最后位置。
- Shift + ^:移动光标到当前行的第一个非空白字符。
- Shift + G:移动光标到文本的最后一行。
- N + Shift + G:移动光标到文本的第 N 行(N 是一个数字)。
- GG:移动光标到文本的第一行。
- h, j, k, l:分别向左、下、上、右移动光标。
- w:向前跳到下一个单词的开始。
- b:向后跳到前一个单词的开始。
文本编辑
- yy 或 Y:复制当前行。
- n + yy:复制从当前行开始的 n 行。
- p:粘贴复制的文本。
- u:撤销最近的编辑操作。
- Ctrl + R:重做之前撤销的操作。
- dd:删除(剪切)当前行。
- n + dd:删除(剪切)从当前行开始的 n 行。
- Shift + ~ 或 ~:切换当前光标位置字符的大小写。
- r:替换当前光标位置的字符。
- n + r:替换当前光标位置开始的 n 个字符。
- Shift + R 或 R:进入替换模式,可以连续替换多个字符。
- x:删除光标位置的字符。
- N + x:从光标位置开始删除 N 个字符。
- N + Shift + X 或 N + X:从光标位置开始向前删除 N 个字符。
- Shift + 3 或 #:高亮显示文档中与当前单词相同的所有单词。
- n:在查找结果之间跳转到下一个匹配项。
命令行模式
文件操作
:w
:保存当前文件。:w filename
:将当前文档保存为指定的文件名。:q
:退出 Vim。如果有未保存的更改,Vim 会警告用户。:wq
或:x
:保存更改并退出 Vim。:q!
:不保存更改强制退出 Vim。
编辑命令
:%s/old/new/g
:全文替换,将文本中的 "old" 替换为 "new"。:g/pattern/d
:删除所有包含指定模式 "pattern" 的行。:r filename
:读取外部文件并将其内容插入到当前编辑位置。
设置选项
:set number
:显示行号。:set nonumber
:隐藏行号。:set nowrap
:关闭自动换行。:set wrap
:开启自动换行。:syntax on
:开启语法高亮。:syntax off
:关闭语法高亮。
窗口和标签页管理
:split
:水平分割当前窗口。:vsplit
:垂直分割当前窗口。:tabnew
:在新标签页中打开一个新的空白文档。:tabclose
:关闭当前的标签页。:tabnext
:切换到下一个标签页。:tabprev
:切换到上一个标签页。
导航和搜索
:/pattern
:搜索文本中的 "pattern"。:?pattern
:反向搜索文本中的 "pattern"。:n
:跳转到下一个搜索结果。:N
:跳转到上一个搜索结果。:nop
:取消搜索。
执行外部命令
:!command
:执行外部命令 "command",如:!ls
会在 Vim 中列出当前目录的文件。
配置VIM
配置 Vim 主要通过编辑它的配置文件,通常是 .vimrc
,来实现。这个文件位于用户的家目录下(在 Unix-like 系统中是 ~/.vimrc
)在 .vimrc
文件中,你可以设置各种选项以定制 Vim 的行为,添加自定义键映射,以及加载插件等。
基本配置
以下是一些常见的 Vim 配置示例,可以加入到你的 .vimrc
文件中:
" 开启语法高亮
syntax enable
" 显示行号
set number
" 启用相对行号显示
set relativenumber
" 设置 tab 键为 4 个空格的宽度
set tabstop=4
set shiftwidth=4
set expandtab
" 在状态行显示当前模式
set showmode
" 启用搜索时的实时反馈
set incsearch
" 搜索时忽略大小写,除非包含大写字符
set ignorecase
set smartcase
" 启用自动缩进
set autoindent
" 开启文件类型检测,加载对应的插件和缩进文件
filetype plugin indent on
" 允许备份
set backup
" 设置备份文件的目录
set backupdir=~/.vim/backups
" 允许撤销操作历史记录
set undofile
set undodir=~/.vim/undo
安装插件
Vim 社区提供了大量插件,增强编辑器的功能。常用的插件管理器有 Vundle、Pathogen 和 Vim-Plug 等。以下是使用 Vim-Plug 安装和管理插件的示例:
首先,你需要安装 Vim-Plug。可以将其安装脚本添加到 .vimrc
中,然后运行 Vim 并执行 :PlugInstall
:
" 指定插件目录
" - 对于 Neovim: stdpath('data') . '/plugged'
" - 避免使用 Vim 的标准目录名称如 'plugin'
call plug#begin('~/.vim/plugged')
" 确保使用单引号
" 简写形式;从 https://github.com/junegunn/vim-easy-align 获取插件
Plug 'junegunn/vim-easy-align'
" 允许使用任何有效的 git URL
Plug 'https://github.com/junegunn/vim-github-dashboard.git'
" 可以使用 | 分隔符在一行中写入多个 Plug 命令
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
" 初始化插件系统
call plug#end()
重新打开 Vim,运行 :PlugInstall
来安装配置中指定的插件