如果现在不太理解下面用的命令的含义,也可以先去看看linux中的基本命令,可能会对此处的配置有所帮助,当然,下面配置并非与linux shell命令有太大关联,大可不必担心
拓展知识链接
:linux shell命令大全及其详细解释
一、 vimrc所在路径
配置之始,在于知其所在。Vim 的配置分为 全局 (System-wide) 与 用户 (User-specific) 两种。我们的主战场,永远是用户配置,厉害的大师往往会根据不同需求为不同用户配置独特的vimrc
。
- 全局配置: 影响系统所有用户,通常位于
/etc/vim/vimrc
。了解即可,我们不碰它。 - 用户配置: 只影响当前用户,这是我们的核心目标。
1、配置文件路径一览
类型 | 配置文件路径 | 作用域 | 备注 |
---|---|---|---|
全局配置 | /etc/vim/vimrc 或 /etc/vimrc |
系统所有用户 | 了解即可,不建议新手修改 |
用户配置 (Vim) | ~/.vimrc |
当前用户 | 我们的主战场! |
用户配置 (Neovim) | ~/.config/nvim/init.vim |
当前用户 | 如果你用的是 Neovim |
💡 提示:
~
代表你的用户主目录 (例如/home/your_username
)。
2、推荐的目录结构
一个清晰的目录结构是良好习惯的开端。.vim
文件夹是你存放所有 Vim 相关文件的地方。
~/.vim/
├── autoload/ # 存放插件的自动加载脚本 (例如插件管理器)
├── plugged/ # (可选) 用于存放插件,由插件管理器创建
└── ... 其他插件相关目录 ...
~/.vimrc # 你的核心配置文件!
二、查看和配置已配置好的全局配置以及用户配置
1、查看用户配置:在~
目录下使用如下命令
不清楚命令含义的,可以先点此链接学习:linux shell命令详解
ls -a
此命令用于列出当前文件夹下所有文件,包括以.
开头的隐藏文件,可以看到我们当前用户的用户配置.vimrc
文件
2、查看全局配置:在~
目录下使用如下命令
切换目录
cd /etc
或者
cd /etc/vim
查看vimrc文件
ls -a
3、查看vimrc
具体内容
cat .vimrc
三、创建第一个 vimrc
如果这是你第一次配置,目录下可能还不存在 .vimrc
文件。
- 打开终端。
- 执行以下命令,若
.vimrc
文件不存在,会创建并开始编辑它(若文件已存在,则会直接打开)
1、创建并编辑用户配置
一般我们都是编辑用户配置.vimrc
vim ~/.vimrc
2、创建并编辑全局配置
vim /etc/vimrc
或者
vim /etc/vim/vimrc
3、退出编辑
先点击esc,然后输入:q!
四、 vimrc 语法
vimrc
的内容,本质上就是一行行 Vim 命令。Vim 每次启动时,都会自动执行这个文件里的所有命令,从而完成初始化。理解其语法是定制你专属神器的第一步。
语法基础
1. 注释
以双引号 "
开头的行是注释。Vim 会完全忽略它。随着你的 .vimrc
文件日渐庞大,清晰的注释是你未来维护配置、回忆起“当初我为什么这么写”的救命稻草。
注释格式
" 注释文本
注释也可以写在命令后,依照自己爱好添加注释即可,双引号不要忘记哦
2. 设置选项 (set
)
使用 set
命令来开启、关闭或调整 Vim 的功能。选项分为两类:布尔选项 (开关) 和 带值选项 (赋值)。
开启/关闭布尔选项
- 开启:
set <选项名>
- 关闭:
set no<选项名>
- 切换(如果已开启则关闭,反之亦然):
set <选项名>!
" 开启功能 (e.g., 显示行号) set number " 关闭功能 (e.g., 禁用自动换行) set nowrap " 这是一个切换操作,可以在 Vim 中临时执行来切换行号是否显示 :set number!
- 开启:
设置带值选项
- 格式:
set <选项名>=<值>
- 注意:等号
=
两侧不能有空格!
" 设置 Tab 键的显示宽度为 4 个空格 set tabstop=4 " 设置主题颜色方案 colorscheme desert
- 格式:
查询选项当前值
在 Vim 的普通模式下,输入以冒号:
开头的命令来查询。" 查询 number 选项的当前状态 (会显示 number 或 nonumber) :set number? " 查询 tabstop 选项的当前值 (会显示 tabstop=4) :set tabstop? " 查看所有被修改过的配置项 :set " 查看所有配置项的当前值 (会列出非常多内容) :set all
💡 进阶技巧:想知道一个选项的具体作用?使用
:help
命令!例如:help 'number'
(注意选项名要用单引号括起来),Vim 会打开详细的帮助文档。
3. 键盘映射 (map
)
键盘映射是 Vim 的精髓,它能将一系列复杂操作绑定到一个简单的快捷键上,是效率提升的核心。
常用映射命令
Vim 有多种模式,因此映射命令也需要指定模式:nnoremap
: Normal Mode (普通模式) - 最常用inoremap
: Insert Mode (插入模式)vnoremap
: Visual Mode (可视模式,包括字符、行、块选择)cnoremap
: Command-line Mode (命令行模式)noremap
: 用于普通、可视、操作待决模式(不常用,推荐用更精确的nnoremap
和vnoremap
)
⚠️ 重要心法:永远使用
noremap
版本!
map
系列(如nmap
)是递归的(Recursive),而noremap
系列(如nnoremap
)是非递归的(Non-Recursive)。递归映射的陷阱 (一个具体的例子):
假设你做了以下两个映射:
nmap j 5j
(你希望按j
一次性向下移动5行)nmap <F2> j
(你希望按F2
执行j
的功能)
当你按下
<F2>
时,Vim 会将它展开为j
,然后发现j
又被映射到了5j
,于是再次展开…最终,Vim 可能会陷入无限循环或者执行一个你意想不到的复杂操作。使用
noremap
就能完美解决:nnoremap j 5j
nnoremap <F2> j
现在,当你按下
<F2>
时,Vim 会执行最原始的j
命令(向下移动一行),而不会去查找j
是否有其他映射。这保证了你的快捷键行为是可预测和稳定的。映射的语法与特殊键
- 格式:
<模式>noremap <你的快捷键> <要执行的命令>
- 特殊键表示法:
<CR>
: 回车键 (Carriage Return),用于执行命令。<Esc>
: Esc 键。<Space>
: 空格键。<leader>
: 领袖键 (一个特殊的前缀,下面会讲)。<C-k>
:Ctrl
+k
<A-k>
or<M-k>
:Alt
+k
(在某些终端下可能不工作)<S-k>
:Shift
+k
- 格式:
五、配置流程
修改配置时,请遵循这个简单高效的流程:
1. 编辑配置:
vim ~/.vimrc
2. 添加或修改配置项,
例如 set cursorline
3. 保存退出
在 Vim 中输入 :wq
4. 应用生效
方法一 (重启大法)
关闭所有 Vim 窗口,再重新打开一个。
方法二 (热重载 - 强烈推荐)
在当前打开的 Vim 中,执行以下命令即可立即应用新配置
,无需重启!
:source ~/.vimrc
六、博主使用的vimrc
配置
"能使鼠标在vi文档内进行点击
set mouse-=a
set nu
syntax on
syntax enable
colorscheme desert
" TagList
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
" WinManager
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>
" Omnicompletion
set nocp
filetype plugin indent on
set completeopt=longest,menu
" Indent
set smartindent
set expandtab
" 自动缩进
set autoindent
set cindent
" Tab键的宽度
set tabstop=4
" 统一缩进为4
set softtabstop=4
set shiftwidth=4
" 将tab替换为空格
nmap tt :%s/\t/ /g<CR>
set foldenable " 允许折叠
set foldmethod=manual " 手动折叠
nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>
autocmd BufNewFile *.[ch],*.hpp,*.cpp exec ":call SetTitle()"
"加入注释
func SetComment()
call setline(1,"/*===============================================")
call append(line("."), "* 文件名称:".expand("%:t"))
call append(line(".")+1, "* 创 建 者: ")
call append(line(".")+2, "* 创建日期:".strftime("%Y年%m月%d日"))
call append(line(".")+3, "* 描 述:")
call append(line(".")+4, "================================================*/")
endfunc
"定义函数SetTitle,自动插入文件头
func SetTitle()
call SetComment()
if expand("%:e") == 'hpp'
call append(line(".")+10, "#ifndef _".toupper(expand("%:t:r"))."_H")
call append(line(".")+11, "#define _".toupper(expand("%:t:r"))."_H")
call append(line(".")+12, "#ifdef __cplusplus")
call append(line(".")+13, "extern \"C\"")
call append(line(".")+14, "{")
call append(line(".")+15, "#endif")
call append(line(".")+16, "")
call append(line(".")+17, "#ifdef __cplusplus")
call append(line(".")+18, "}")
call append(line(".")+19, "#endif")
call append(line(".")+20, "#endif //".toupper(expand("%:t:r"))."_H")
elseif expand("%:e") == 'h'
call append(line(".")+10, "#endif")
call append(line(".")+10, "")
call append(line(".")+10, "#ifndef _".toupper(expand("%:t:r"))."_H")
call append(line(".")+11, "#define _".toupper(expand("%:t:r"))."_H")
elseif &filetype == 'c'
" call append(line(".")+10,"#include \<strings.h\>")
" call append(line(".")+10,"#include \<stdlib.h\>")
" call append(line(".")+10,"#include \<string.h\>")
call append(line(".")+5,"#include \<stdio.h\>")
call append(line(".")+6,"")
call append(line(".")+7,"int main(int argc, char *argv[])")
call append(line(".")+8,"{ " )
call append(line(".")+9,"" )
call append(line(".")+10," return 0;")
call append(line(".")+11,"} ")
elseif &filetype == 'cpp'
call append(line(".")+10,"#include \<iostream\>")
call append(line(".")+10,"using namespace std;")
endif
endfunc
"新建文件后,自动定位到文件第10行
autocmd BufNewFile * normal 10gg
set termencoding=utf-8
set encoding=utf8
set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030
注:此配置中添加了一些插件设置,需要先安装和配置 TagList、WinManager 和 Cscope等,不然需要删除对应部分配置
七、结语
恭喜!你已完成 vimrc
的入门配置,你的 Vim 现在已今非昔比。
这仅仅是万里长征的第一步。Vim 的世界浩瀚无垠,前方还有插件管理 (如 vim-plug
, packer
)、LSP (语言服务协议)、更高级的窗口管理等你去探索。但请务必牢记最重要的修行法则:
循序渐进,理解你配置中的每一行代码。
你的 .vimrc
将会随着你的技艺一同成长,最终成为你手中那柄独一无二、心手合一的编程利器。祝你修行愉快!