多文件与窗口管理
为了这次练习,我们需要先准备两个文件。请退出 Vim,在终端里执行:
echo -e "apple\nbanana\ncherry\ndate\nelderberry" > fruits.txt
echo -e "red\nyellow\npink\nbrown\npurple" > colors.txt
缓冲区
你打开一个文件,Vim 就在内存里为它创建一个“缓冲区”(buffer)。你可以同时打开好几个缓冲区,只在需要时切换显示。
跟着做:
vim fruits.txt
你现在打开了 fruits.txt,这是缓冲区列表里的第一个。
在 Vim 里,用下面命令打开第二个文件:
:e colors.txt
(意思是 edit 一个新文件)。现在你看到的是 colors.txt,但 fruits.txt 的缓冲区还在后台。
查看缓冲区列表:输入::ls(或 :buffers、:files,都是同一个命令)
你会看到类似:
1 # "fruits.txt" line 1
2 %a "colors.txt" line 1
%表示当前正在显示的文件a表示激活的缓冲区#表示上一个访问的缓冲区
切换缓冲区
按 Ctrl + ^。这个操作会在“当前文件”和“上一个文件”之间来回跳。按一次跳回 fruits.txt,再按一次跳回 colors.txt。这是最快的两个文件互切方式。
按编号或名字切换:
:b 1切换到编号为 1 的缓冲区:b fruits甚至能支持模糊匹配,只要打出部分名字,按 Tab 自动补全
窗口分割
在 colors.txt 界面里,输入
:spilt fruits.txt
简写(:sp fruits.txt)
屏幕被水平分割成上下两半,上面是 colors.txt,下面是 fruits.txt。
Ctrl + w然后按j—— 跳到下面的窗口Ctrl + w然后按k—— 跳到上面的窗口规律是:
Ctrl+w开启窗口命令模式,然后再按方向键(我们就用hjkl)
垂直分割
输入::vsplit(或 :vsp),把当前窗口左右再分成两半。如果你还没打开新文件,分割出来的两个窗口会显示同一个缓冲区,可以在其中一个用 :e 换文件。
Ctrl + w 再按 =,所有窗口立刻均分屏幕空间。
关闭当前窗口
:q 正常关闭(或者 Ctrl + w 再按 q)
标签页
创建标签页
输入
:tabnew,会打开一个空白的新标签页,里面只有一个窗口在新标签页里,用
:e fruits.txt打开文件
切换标签页
gt—— 跳到下一个标签页gT—— 跳到上一个标签页数字+gt—— 跳到指定的标签页(比如1gt跳到第一个标签页)
关闭标签页
:tabclose或:tabc
文件浏览
打开当前目录的文件浏览器
:Explore
(简写 :Ex)。你会看到一个文件列表,用 j k 上下移动,回车打开文件或者进入目录,如果想看上层目录,光标移到 ../ 上回车即可。
窗口间复制粘贴
场景:把 fruits.txt 里的内容,逐行复制到 colors.txt 的每一行前面。
用
:sp fruits.txt水平分割,上下各一个文件。在上面窗口(
colors.txt)定位到第一行。按
Ctrl + w再按j跳到下面窗口。光标放在
apple上,按yy复制整行。按
Ctrl + w再按k跳回上面窗口。按
P(大写)将 apple 粘贴到当前行之前。然后按
j下移一行,再按Ctrl+w j跳下去复制 banana,如此循环。
命令总结
高效定制
编辑 .vimrc 文件
Vim 的配置都写在一个叫 .vimrc 的文件里,它就在你的用户主目录下。
在终端里输入:
vim ~/.vimrc
如果文件已经存在(有些系统会预装一个示例),你可以先备份一下:
cp ~/.vimrc ~/.vimrc.backup
现在用 Vim 打开它,我们一起写几行。
基础设置
在 ~/.vimrc 里输入以下内容
" 基础设置
set number " 显示行号
set relativenumber " 显示相对行号(配合跳转很好用)
set autoindent " 自动缩进
set smartindent " 更智能的缩进(比如换行自动对齐)
set tabstop=4 " Tab 键宽度为 4 个空格
set shiftwidth=4 " 自动缩进时使用 4 个空格
set expandtab " 把输入的 Tab 自动转成空格(写代码常用)
set cursorline " 高亮当前行
set hlsearch " 搜索时高亮所有匹配项
set incsearch " 输入搜索词时即时匹配
set ignorecase " 搜索时默认忽略大小写
set smartcase " 但如果搜索词包含大写字母,就区分大小写
set showcmd " 在屏幕右下角显示正在输入的命令
set showmode " 在屏幕左下角显示当前模式(-- INSERT -- 等)
set ruler " 显示光标所在行号和列号
set laststatus=2 " 始终显示状态栏
set wildmenu " 命令行补全时显示增强菜单
set mouse=a " 启用鼠标支持(选文本、调窗口大小等,适合新人过渡)
保存并退出(:wq)。重新打开 Vim,你就可以看到设置生效了。你可以试试新的变化。或者在不退出的情况下,在任意打开的文件里执行:
:source ~/.vimrc
创建快捷键映射
Vim 允许你把常用的组合键映射成更方便的快捷键。我们会改的都是普通模式下的映射。在 ~/.vimrc 里继续添加:
" 快捷键映射
" <Leader> 键默认是反斜杠 \,可以自定义为空格
let mapleader = "\<Space>"
" 用 <Leader> + w 快速保存
nnoremap <Leader>w :w<CR>
" 用 <Leader> + q 快速退出
nnoremap <Leader>q :q<CR>
" 用 <Leader> + x 保存并退出
nnoremap <Leader>x :wq<CR>
" 用 Ctrl + j/k 在窗口间快速切换(代替 Ctrl+w j/k)
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-h> <C-w>h
nnoremap <C-l> <C-w>l
" 用 H/L 快速跳到行首/行尾(省去按 Shift)
nnoremap H ^
nnoremap L $
" 用 J/K 一次移动 5 行(实现“快速滚动”)
nnoremap J 5j
nnoremap K 5k
" 用 <Leader> + / 清除搜索高亮
nnoremap <Leader>/ :noh<CR>
注意:
nnoremap表示只在普通模式下生效,且不会递归映射。这是安全且推荐的做法。
重新加载配置(:source ~/.vimrc)
安装插件管理器
Vim 社区有无数插件,能让编辑器支持语言补全、文件树、模糊搜索等等。我们需要一个插件管理器来管理它们。这里推荐 vim-plug,因为它简单、快、支持异步安装。
安装 vim-plug:
在终端里运行这一条命令(它会把 plug.vim 下载到正确位置):
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
配置 ~/.vimrc 以使用插件
打开 ~/.vimrc,在文件里合适的位置加入插件定义块:
" 插件管理
call plug#begin('~/.vim/plugged')
" 一个超好用的注释插件:gc 注释/取消注释
Plug 'tpope/vim-commentary'
" 状态栏美化(可选,新手友好)
Plug 'vim-airline/vim-airline'
" 文件树浏览器(可选,类似 IDE 侧边栏)
Plug 'preservim/nerdtree'
call plug#end()
保存文件并重新加载(:source ~/.vimrc 或重启 Vim),然后执行:
:PlugInstall
你会看到 vim-plug 自动下载并安装这几个插件。等它们装好后,我们立刻体验一个:vim-commentary。
体验第一个插件 —— vim-commentary
这个插件提供了一个非常符合 Vim 哲学的功能:用 gc 动作来注释或取消注释代码/文本。
创建一个 test.py,随意写一些代码,在普通模式下:
按
gcc—— 注释/取消注释当前行按
gc然后按j—— 注释当前行及下一行(gc+ 动作)选中一段文字(用
V进入可视行模式,然后j选几行),再按gc—— 注释选中的多行
它支持大量文件类型(貌似.txt文件不支持,好像文本文件本身就不能注释),自动判断用 //、# 还是 " 等注释符。
命令总结
总结
Vim 的基本使用差不多就是以上这些,如果还需要深入学习,可以自行上网搜索。比如说可视化模式、宏操作等。
Vim使用教程-2
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法