A Good vimrc(vim 个人简单定制化(不含插件))

A Good Vimrc 中文版

Don't put any lines in your vimrc that you don't understand.

配色方案

colorscheme badwolf         " awesome colorscheme

配色方案是主观的,这里目前选择了 Steve Losh 的 badwolf。(这里的配色主题需要另外下载)


启用语法处理

syntax enable           " enable syntax processing

Vim 中的许多设置都有长名称和短名称。 例如 backgroundbg 相同。 为了将来的可读性,我强烈建议使用长名称。


Spaces & Tabs

set tabstop=4       " number of visual spaces per TAB

tabstop 是 TAB 对应的空格数,因此,当 Vim 打开文件并读取 TAB 字符时,它会使用那么多空格来直观地显示 TAB 。

set softtabstop=4   " number of spaces in tab when editing

softabstop 是插入模式时制表符所占的空格数。 因此,该值是当您按 TAB 时插入的空格数,也是当您退格时删除的空格数。

set expandtab       " tabs are spaces

Expandtab 将 TAB 转换为空格。 这样,TAB 就成了“插入四个空格”的快捷方式。

总而言之,这些都是使用空格而不是制表符的语言编辑文件的绝佳选择,因为这可以确保实际不使用 TAB 。 我一天的大部分时间都花在 pythonbash 上,其中空格是常态。 我喜欢它,因为这意味着我的源代码在每台机器上看起来都是一样的。


界面 UI 配置

这些选项可以改变 Vim 中的视觉效果。

set number              " show line numbers

显示行号

set showcmd             " show command in bottom bar

showcmd 在 Vim 右下角显示最后输入的命令。 我在这里设置了它,但实际上它没有显示在我的 Vim 中,因为我使用了 powerline 插件(我们稍后会介绍)。

set cursorline          " highlight current line

cursorline 在光标当前所在的行上绘制水平线突出显示(或下划线,具体取决于您的颜色方案)。 我发现,当您切换回 Vim 会话或在 Vim 中的窗口之间切换时,这可以更轻松地准确跟踪您上次离开的行。

filetype indent on      " load filetype-specific indent files

这既打开文件类型检测,又允许根据该检测加载特定于语言的缩进文件。 对我来说,这意味着每次打开 *.py 文件时都会加载位于 ~/.vim/indent/python.vim 的 python 缩进文件。

set wildmenu            " visual autocomplete for command menu

这是一个非常酷的功能,我以前不知道 Vim 有这个功能。 你知道当你运行 :e ~/.vim 时,如果您打开狂野菜单,并按下 TAB ,它将提供一个图形菜单,其中包含您可以循环浏览的所有比赛。

set lazyredraw          " redraw only when we need to.

Vim 喜欢在它可能不需要的时候重绘屏幕——比如在宏中间。 这告诉 Vim 在这些情况下不必费心重绘,从而实现更快的宏。
(当重复操作应用在大量的行上时,可能会遇到性能问题,这主要是因为对每一行操作之后Vim会进行重绘。通过上面的配置可以提高性能。)

set showmatch           " highlight matching [{()}]

使用 showmatch,当光标移到类似括号的字符上时,匹配的字符也会突出显示。


搜索

我喜欢 Vim 的搜索。 我更喜欢下面设置的搜索。

set incsearch           " search as characters are entered
set hlsearch            " highlight matches

这些应该是不言自明的。 它们让搜索变得更好。

" turn off search highlight
nnoremap <leader><space> :nohlsearch<CR>

Vim 将保留搜索中突出显示的匹配项,直到您运行新搜索或使用 :nohlsearch 手动停止突出显示旧搜索。 我发现自己一直在运行这个,所以我将它映射到<leader><space>。vim 的 <leader> 键默认是 \


折叠

Vim 折叠是一个非常贴心的功能,我不会大量使用,但当我需要它时,我希望它有合理的设置。

set foldenable          " enable folding

显示所有折叠。

set foldlevelstart=10   " open most folds by default

FoldLevelStart 是打开新缓冲区的起始折叠级别。 如果设置为 0,则所有折叠都将关闭。 将其设置为 99 将保证折叠始终打开。 因此,此处将其设置为 10 可确保在打开缓冲区时仅折叠非常嵌套的代码块。

set foldnestmax=10      " 10 nested fold max

折叠可以嵌套。 设置折叠次数的最大值可以防止折叠次数过多。 如果你需要超过 10 倍的级别,你必须编写一些在回调地狱中燃烧的 Javascript,我为你感到非常难过。

" space open/closes folds
nnoremap <space> za

我经常更改 <space> 的映射,但这是它的当前命令。 za 打开/关闭当前块周围的折叠。 有趣的是,我听说 Vim 中使用 z 字符来表示折叠,因为它看起来像一张折叠的纸。 可能不是,但它是一个很好的故事。 😃

set foldmethod=indent   " fold based on indent level

这告诉 Vim 根据缩进折叠。 这对我来说特别有用,因为我大部分时间都在使用 Python。 其他可接受的值包括标记、手册、表达式、语法、差异。 运行 :help Foldmethod 来了解它们各自的作用。


移动

这里我们开始讨论自定义绑定。 这组绑定都与移动命令相关。

" move vertically by visual line
nnoremap j gj
nnoremap k gk

这两个允许我们在视觉上围绕线条移动。 因此,如果有一条很长的线在视觉上被包裹成两行,j 将不会跳过视觉线的“假”部分而转而选择下一个“真实”线。

" move to beginning/end of line
nnoremap B ^
nnoremap E $

" $/^ doesn't do anything
nnoremap $ <nop>
nnoremap ^ <nop>

这些感觉是我最具争议的绑定,因为它们覆盖了现有的运动绑定。 我的想法是,对于这样一个经常使用的动作来说,点击 ^ 和 $ 跳转到行的开头和结尾有点太不舒服了。 因此,我反弹了 E 和 B,它们通常用于在视觉单词上前后移动以达到这些目的。 接下来,我将旧方法绑定到 <nop> 来训练自己使用新方法。

" highlight last inserted text
nnoremap gV `[v`]

这个非常酷。 它会直观地选择您上次在 INSERT 模式下添加的字符块


leader 快捷键

到这里,我们已经到达了自定义按键绑定的核心部分。 本节将介绍我经常使用的许多不同的插件和自定义函数。 让我们开始吧。

let mapleader=","       " leader is comma

\ 对于一个 leader 来说有点遥远。 我发现 , 是一个更好的替代品。

" jk is escape
inoremap jk <esc>

<ESC> 距离很远。 jk 是一个更好的替代品,因为它位于主行,实际上我在编写文本时从不键入它。 除了现在我写这篇文章的这一部分的时候。 这是我用 Vim 写的。 如果您需要输入这种罕见的按键序列,解决方法是输入 j,等待领导者检查超时消失,然后输入 k。(感觉这个映射不是很必要)

" toggle gundo
nnoremap <leader>u :GundoToggle<CR>

Vim 最聪明的创新之一是,它没有将撤消建模为简单的堆栈。 在 Vim 中它是一棵树。 这可以确保您永远不会丢失 Vim 中的操作,但也使遍历该树变得更加困难。 Gundo.vim 通过以图形形式显示撤消树来修复此问题。 得到它,不要回头。 在这里,我将其映射到 ,u,我喜欢将其视为“超级撤消”。(需要安装 Gundo.vim 插件)

" edit vimrc/zshrc and load vimrc bindings
nnoremap <leader>ev :vsp $MYVIMRC<CR>
nnoremap <leader>ez :vsp ~/.zshrc<CR>
nnoremap <leader>sv :source $MYVIMRC<CR>

这些是编辑和获取我的 vimrc 和 zshrc 的快捷方式。 就是这样。

" save session
nnoremap <leader>s :mksession<CR>

是否曾经想保存给定的窗口分类,以便下次打开 Vim 时它们就在那里? :mksession 就是这么做的! 保存 Vim 会话后,您可以使用 vim -S 重新打开它。 在这里,我将其映射到 ,s,我记得它是“超级保存”。

" open ag.vim
nnoremap <leader>a :Ag

Silver Searcher 是一个很棒的命令行工具,用于搜索项目中的源代码。 速度真快。 该命令行工具名为 ag(类似于元素 silver)。 值得庆幸的是,有一个很棒的 Vim 插件 ag.vim,它可以让你在不离开 Vim 的情况下使用 ag,并将结果拉到一个快速修复窗口中,以便轻松跳转到比赛。 这里我将它映射到 ,a。

CtrlP

Launch Config

Tmux

Autogroups

Backups

Custom Functions


.vimrc 简单定制化

vimrc个人定制版
" Jzheng
" ===
set nocompatible
filetype on
filetype indent on
filetype plugin on
filetype plugin indent on
set mouse=a
set encoding=utf-8

set clipboard=unnamed "剪贴板=未命名寄存器

" Prevent incorrect backgroung rendering
let &t_ut=''

" ===
" === Main code display
" ===
set number "显示行号
set relativenumber "采用相对行号
set ruler "启用标尺
set cursorline "高亮光标行
syntax enable "启用语法高亮,只在当前文件中有效
syntax on "针对所有缓冲区中的文件启用语法高亮度

" ===
" === Editor behavior
" ===
" Better tab
set ts=4
set expandtab
set autoindent
set list
set listchars=tab:▸\ ,trail:▫ "显示 tab,空格
set scrolloff=5 "光标行翻滚上下限

" Prevent auto line split
set wrap
set tw=0

set indentexpr=
" Better backspace
set backspace=indent,eol,start


"代码折叠
set foldmethod=indent "可选:[1]index:相同缩进折叠,[2]manual:默认折叠方式,[3]syntax:语法高亮折叠
set foldlevel=99

"不同模式下光标的类型
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"

" Show command autocomplete
set wildignore=log/**,node_modules/**,target/**,tmp/**,*.rbc " 将忽略在选项wildignore中指定的文件模式,
set wildmenu                                                 " show a navigable menu for tab completion
set wildmode=longest,list,full

" ===
" === Status/command bar
" ===
set laststatus=2
set autochdir
set showcmd
set formatoptions-=tc


" Searching options
set hlsearch
exec "noh"
set incsearch
set ignorecase
set smartcase "智能判断大小写

" ===
" === Restore Cursor Position "保存光标位置
" ===
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif

代码折叠常用命令

  1. zM:关闭所有折叠
  2. zR:打开所有折叠
  3. za:打开或关闭当前光标所在处的折叠
  4. 打开所有嵌套的折叠
posted @ 2022-10-25 11:15  小超不挑食  阅读(39)  评论(0编辑  收藏  举报