01. vim的基本操作
graph TD
SOFT --> git(GIT)
syntax on:这可以确保 Vim 知道我在使用什么语法。做笔记、写这种文章时我主要使用 Markdown; 而在写小说的时候,纯文本是我的首选格式。 set noerrorbells:为了你的精神状态,我强烈建议打开这个选项。 set textwidth=100:为了便于阅读,没有人愿意横向滚动一个文本文件。 set spell:如果有拼写错误的话提醒你。 set wrap:确保文本以写作者而不是程序员的方式进行折行。
你会注意到,我没有花更多时间讨论其他一些基本配置选项,因为我并不觉得那些对写作者来说有多重要。因为我做一些业余的编码工作,所以我的.vimrc配置反映了这一点。如果你只想在Vim上写作,那么上述配置就应该能让你顺利开始。
从这点上来说,你的 .vimrc 是一个活的文档,它能生动地反映你想用 Vim 做什么,以及你希望 Vim 如何为你做这些事情。
syntax on
set noerrorbells " 取消 Vim 的错误警告铃声,关闭它以免打扰到我们 "
set textwidth=100 " 确保每一行不超过 100 字符 "
set tabstop=4 softtabstop=4
set shiftwidth=4
set expandtab
set smartindent
set linebreak
set number
set showmatch
set showbreak=+++
set smartcase
set noswapfile
set undodir=~/.vim/undodir
set undofile
set incsearch
set spell
set showmatch
set confirm
set ruler
set autochdir
set autowriteall
set undolevels=1000
set backspace=indent,eol,start
" 下面的设置确保按写作者而不是程序员喜欢的方式折行 "
set wrap
nnoremap <F5> :set linebreak<CR>
nnoremap <C-F5> :set nolinebreak<CR>
call plug#begin('~/.vim/plugged')
" 这是颜色风格插件 "
Plug 'colepeters/spacemacs-theme.vim'
Plug 'sainnhe/gruvbox-material'
Plug 'phanviet/vim-monokai-pro'
Plug 'flazz/vim-colorschemes'
Plug 'chriskempson/base16-vim'
Plug 'gruvbox-community/gruvbox'
" 这是为了更容易的诗歌写作选择的一些插件 "
Plug 'dpelle/vim-LanguageTool'
Plug 'ron89/thesaurus_query.vim'
Plug 'junegunn/goyo.vim'
Plug 'junegunn/limelight.vim'
Plug 'reedes/vim-pencil'
Plug 'reedes/vim-wordy'
" 这一部分是为了更容易地与机器集成,用了 vim-airline 这类插件 "
Plug 'vim-airline/vim-airline'
" 这一部分外理工作区和会话管理 "
Plug 'thaerkh/vim-workspace'
" 与上面插件相关, 下面的代码将你的所有的会话文件保存到一个你工作区之外的目录 "
let g:workspace_session_directory = $HOME . '/.vim/sessions/'
" 与上面插件相关,这是一个 Vim 活动的跟踪器 "
Plug 'wakatime/vim-wakatime'
" 一个干扰因素:我在这里使用了一些 Emacs 的功能,特别是 org-mode "
Plug 'jceb/vim-orgmode'
" 这是文件格式相关插件 "
Plug 'plasticboy/vim-markdown'
call plug#end()
colorscheme pacific
set background=dark
if executable('rg')
let g:rg_derive_root='true'
endif
vim 删除文件中的所有空格
:v/./d
Vim 范围选择
使用 Vim,你可以轻松地对文件中的一系列行执行操作。你可以通过起始行号、逗号和结束行号(包括)来指示范围。除了文字行号之外,你还可以使用句点(.)表示当前行,使用美元符号 ($) 表示文件缓冲区中的最后一行,以及使用百分号(%)表示整个文件。
这里举几个例子来说明。
:2,10d删除第 2 到 10 行:25,$d删除从第 25 行到文件末尾的每一行:
你可以使用以下命令删除每一行: :%d
要将第 5 到 10 行复制(或转移)到第 15 行之后:
:5,10t 15
要将第 5 行到第 10 行移动到第 15 行之后(而不是复制):
:5,10m 15
vim diff 对比文件
vimdiff file_left file_right 或者 vim -d file\_left file\_right
方式二
vim file_left
vertical diffsplit file_right
-
在差异点跳转
- 向下跳转:]c
- 向上跳转:[c
- 跳转到更远的差异点: 3]c
-
文件合并
- 将当前文件内容合并到另一边:dp (diff “put”)
- 将另一边内容合并到当前行:do (diff “obtain”)
- 手动刷新比较结果: :diffupdate
-
窗口移动
- Ctrl-w K(把当前窗口移到最上边)
- Ctrl-w H(把当前窗口移到最左边)
- Ctrl-w J(把当前窗口移到最下边)
- Ctrl-w L(把当前窗口移到最右边)
vim 启动速度的测量与优化
=======
vim -u NONE #执行以下命令,以最干净的配置启动Vim
- 如果瞬间启动成功:恭喜,问题基本可以锁定在你的个人配置文件 (~/.vimrc) 或插件上。
- 如果依然卡顿:问题可能出在Vim的历史记录文件、系统环境或Vim自身。
状态栏的优化与显示
statusline
vim -u NONE #执行以下命令,以最干净的配置启动Vim
- 如果瞬间启动成功:恭喜,问题基本可以锁定在你的个人配置文件 (~/.vimrc) 或插件上。
- 如果依然卡顿:问题可能出在Vim的历史记录文件、系统环境或Vim自身。
状态栏的优化与显示
statusline
查看 VIM 启动时间
- 使用内置命令生成启动日志
打开你的终端,执行以下命令。这条命令会启动 Vim,记录详细的启动时间到 /tmp/vim.log 文件,然后立即退出 。
vim --startuptime /tmp/vim.log +qall
- 分析日志,找到耗时最长的项目
日志文件生成后,你需要从中找出最耗时的部分。最简单的办法是按耗时(第二列)进行排序,这样最慢的项目就会排在最后,一目了然 。
执行下面的命令,它会排序并显示日志内容:
sort -n -k 2 /tmp/vim.log
如果你想只看最耗时的前几名(例如前10名),可以这样:
sort -n -k 2 /tmp/vim.log | tail -n 10
- 如何阅读和分析日志
你需要关注的是日志中的第二列(数字),它代表了每个环节消耗的时间,单位通常是毫秒 (ms) 。
快速判断标准:如果启动总时间在 200ms 以下,体验会非常流畅;超过 500ms 就会感觉到卡顿;如果超过 1秒,就需要认真优化了 。
找出罪魁祸首:排在末尾的那些行,就是加载最慢的环节。它们通常是某个具体的插件脚本或你的 .vimrc 中的某段配置 。例如,如果看到某个以 nerdtree 或 syntax 开头的脚本耗时很长,就知道问题所在了。
4.
在vim中设置viminfo的大小
" 完全控制 viminfo 存储的内容
set viminfo='100,<50,s10,h,%
" 参数说明:
" '100 - 最多保存 100 个文件的标记(不是历史命令!)
" <50 - 每个寄存器最多保存 50 行
" s10 - 寄存器大小超过 10KB 就不保存
" h - 禁用高亮搜索的历史记录(hlsearch)
" % - 保存/恢复缓冲区列表
" ! - 保存/恢复全局变量(以大写字母开头的)
" / - 保存搜索历史的最大条数(未指定时默认50)
" : - 保存命令历史的最大条数(未指定时默认50)
" @ - 保存输入行历史的最大条数(未指定时默认50)
" 更激进的限制(如果还想进一步压缩):
" set viminfo='20,<10,s1,h
Vim 的启动参数
在 Vim 中,你可以通过以下两种主要方式用标签页(tab)打开多个文件:在启动 Vim 时和在 Vim 会话中。
🚀 启动 Vim 时打开多个标签页
如果你想在打开 Vim 的同时,就让每个文件都位于独立的标签页中,可以使用 -p 选项:
vim -p file1.py file2.py file3.py
这个命令会启动 Vim,并将 file1.py、file2.py 和 file3.py 分别在不同的标签页中打开 -1-7。
Vim 默认最多只能打开 10 个标签页。如果你想一次打开超过 10 个文件,可以在你的
.vimrc配置文件中设置一个更大的值,例如set tabpagemax=50-9。
🔧 在 Vim 会话中打开新标签页
当你已经处于 Vim 中,想要在当前会话里打开一个新标签页来编辑文件时,可以使用以下命令:
:tabnew filename或:tabe[dit] filename:这两个命令都会在一个新的标签页中打开指定的文件filename。如果文件不存在,Vim 会为你创建一个新文件 -1-2-5。这是最常用的方法。:tabf[ind] filename*:这个命令允许你在'path'定义的路径中搜索匹配filename*模式的文件,并在新标签页中打开它。注意:这个命令要求搜索结果唯一,如果匹配到多个文件,会报错 -1-2。
🧭 标签页的常用操作
打开多个标签页后,熟练地在它们之间切换和管理是关键。这里有一份常用操作速查表 -1-2-7:
| 操作 | 命令/快捷键 | 说明 |
|---|---|---|
| 切换标签页 | gt 或 :tabnext |
切换到下一个标签页。 |
gT 或 :tabprevious |
切换到上一个标签页。 | |
{N}gt |
直接跳转到第 N 个标签页。例如,2gt 跳转到第二个标签页。 |
|
:tabfirst 或 :tabrewind |
跳转到第一个标签页。 | |
:tablast |
跳转到最后一个标签页。 | |
| 管理标签页 | :tabs |
列出所有打开的标签页以及其中包含的窗口 \-3\-8。 |
:tabclose |
关闭当前标签页 \-1。 | |
:tabonly |
关闭除当前标签页外的所有其他标签页 \-1。 | |
:tabmove [N] |
将当前标签页移动到第 N 个标签页之后。如果 N 为 0,则移动到开头 \-1\-3。 |
|
| 批量操作 | :tabdo [command] |
在所有标签页中执行同一个命令。例如,:tabdo %s/foo/bar/g 会在所有标签页中将 “foo” 替换为 “bar” \-1\-4。 |
💡 一个小提示:在 Vim 中,一个标签页可以包含多个窗口(即分割窗口),这使得它成为一个非常强大的工作区组织工具。你可以把相关的一组文件(例如,一个HTML文件、它的CSS文件和对应的JavaScript文件)放在一个标签页里,并通过窗口分割来同时查看和编辑它们 -1-7。
vimscript 中,判断是否拥有某些特性
if !has('patch-9.1.0276')
" 如果版本低于 9.1.0276,安装插件
Plug 'vim-pandoc/vim-pandoc'
Plug 'vim-pandoc/vim-pandoc-syntax'
endif
在 Vim 中删除所有包含 “sel” 的行,可以使用以下命令:
vim
:g/sel/d
命令解释:
-
:g- 全局命令(global) -
/sel/- 匹配包含 “sel” 的行 -
d- 删除匹配的行
其他相关命令:
-
删除不包含 “sel” 的行:
vim
:v/sel/d或
vim
:g!/sel/d -
删除时忽略大小写:
vim
:g/sel/di或
vim
:g/\csel/d -
删除前确认(交互式):
vim
:g/sel/d | c -
删除指定范围内的行:
vim
:10,50g/sel/d
注意事项:
-
删除操作不可逆,建议先备份或使用
u命令撤销 -
可以使用
:g/sel/p先预览匹配的行(p 表示 print)