前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >极简 Vim

极简 Vim

原创
作者头像
xiaoyang
修改2022-03-29 11:07:42
1.5K1
修改2022-03-29 11:07:42
举报

个人电脑的网络权限和系统权限都在自己手里,可以安装任意软件,进行各种设置,以达到自己用起来最顺手的状态。但工作电脑就不一定了,很多工作岗位只有有限的系统权限和网络权限,安装、使用软件就受到诸多掣肘:可能需要自己编译软件及各种插件,还很可能需要 IT 部门的协助,甚至要先经过审批才能进行。不要觉得只要我和 IT 关系足够好,部门协作足够流畅,这些问题都很容易解决。工作所需的软件安装的确没问题,但是如果你是一个强迫症,需要一些很细节的设置及个性化,甚至你自己都不知道最好的效果是什么,需要多次调节才能确定终极设置。这个过程你可能会羞于求助 IT。但是其实将工作工具设置到自己最舒服的状态,是基本需求。

因此,在工作过程中,我喜欢那些设置方便,依赖很少的工具,如 sumatraPDF,如 Vim


vim 不需要安装, Linux 系统在它就在。只是默认设置比较辣眼睛,用默认设置的我敬你是一条真汉子。一般人会针对自己的爱好设置下。那么如何将默认设置很丑陋难用的 vim 设置成颜值尚可,使用方便的工具? 我们需要一个自己完全理解,并且足够简单的 ~/.vimrc

autocmd Filetype c,cpp,hpp,python set nu " 只在打开特定格式文件时开启行号
autocmd Filetype c,cpp,hpp,python set numberwidth=1 " 当行数为个位数时,只占用一个字符位显示行号
syntax on " 打开语法高亮

autocmd FileType markdown,md set ts=2 " markdown 文件, tab 键缩进2个字符

colorscheme two-firewatch
"colorscheme solarized
set background=dark

set noshowcmd
set noshowmode
set laststatus=0
set noruler

set incsearch " 根据输入的查找内容实时匹配文本
nnoremap <CR> :noh<CR><CR> " 键入 Enter 后取消高亮搜索匹配文本

" highlight current line
set cursorline
highlight CursorLine cterm=NONE ctermbg=235 guibg=NONE guifg=NONE

set viminfo='1000,<800 "vim跨文件拷贝最大行数800
set nocompatible              " required
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

"""""""""""""""""""""""python""""""""""""""""""""""""""""""
set shiftwidth=4
set tabstop=4
autocmd FileType python set expandtab
autocmd Filetype gitcommit setlocal spell textwidth=100 " for git commit
set smartindent
set autoindent
set termguicolors
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

fun! ShowFuncName()
    let lnum = line(".")
    let col = col(".")
    echohl ModeMsg
    echo getline(search("^[^ \t#/]\\{2}.*[^:]\s*$", 'bW'))
    echohl None
    call search("\\%" . lnum . "l" . "\\%" . col . "c")
endfun
map F : call ShowFuncName() <CR> " C++ 显示光标处内容所在函数

这是用 Vim 打开 ~/.vimrc 的最终外观

用 vim 打开 vim 配置文件
用 vim 打开 vim 配置文件

对比上文的代码块和图中用 vim 打开的 `~/.vimrc` 文件显示效果可以看出,图中的显示效果明显好于代码块。 这里介绍下每项设置的初衷 最简化 vim 界面 状态栏要它干啥呢? 占据了我们一行空间,而显示器本来纵向尺寸就不如横向尺寸,没必要用一个状态栏占据我们宝贵的纵向空间,所以

set laststatus=0 " 不显示状态栏
set noruler " 不显示标尺
set noshowmode 
set noshowcmd

横向尺寸虽然宽裕,但也不能浪费啊,一般只有 coding 时才需要行号,所以

autocmd Filetype c,cpp,hpp,python set nu " 只在打开特定格式文件时开启行号
autocmd Filetype c,cpp,hpp,python set numberwidth=1 " 当行数为个位数时,只占用一个字符位显示行号

即使在其他文件中偶尔需要行号,也可以简单的在命令行输入 set nu 调出行号,而不是每个文件都显示这一信息。

光标可以告诉我们当前所在行,但是有时光标不好定位,所以我会选择改变当前行的背景以突出当前行。另外在查看如 csv 文件时也可以清晰的区分那些数据在同一行,这需要如下设置

" highlight current line
set cursorline
highlight CursorLine cterm=NONE ctermbg=235 guibg=NONE guifg=NONE

为了重现图中的样式,还需要

  • 将字体设置成 Microsoft YaHei Mono, 这是我认为的目前 Windows 平台的字体最优解
  • vim 默认全屏使用,这样才能完全利用屏幕空间,在诸如 Cygwin, Putty 等连接 Linux 的软件中一般使用 Alt + Enter快捷键实现

最简化工具链


我为自己定下了几个使用准则

1. 精简工具链

使用 Vim 本身就是精简工具链的行为。系统里命令行直接进行查看、编辑。另外在此基础上,能用 vim 自己解决的问题就不要用其他软件,如需要使用分屏功能,那就直接用 vim 的分屏,而不是用 Tmux 的分屏

2. 减少插件

vim 的插件系统很强大,很方便,但是为了降低依赖,我会要求自己尽可能少装插件。现在我只用 Clang-Format 一个插件,用来自动格式化 C++ 代码

3. 少用自定义快捷键,不覆盖 Vim 的默认快捷键

快捷键的确方便,但是到了一个新环境还要再设置一次。对于中等频率或者更低频率的快捷键,强烈建议使用系统自带

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最简化工具链
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档