阅读 874

vim折腾札记

准备工具


  • vim8.2.539 (163)
  • macOS Catalina 10.15.7

注意


如果您是用Mac的包管理器brew安装vim的话,请不要这么做。用brew安装的vim的版本不是最新的!

所以最好直接Baidu一下搜索链接安装。

前言


(老样子)身为折腾帝的我又开始了新一轮对vim的折腾

还是先放上成效图:

界面还是挺美观的,不知道各位看客怎么觉得,请在下方的评论区敲出自己的想法 ↓ ↓ ↓

正文

imageddcb1e269800e367.png

折腾一-vim的初级使用教程

vi-vima52ba95b5d7567b9.gif

首先,先说说vim的使用

基本上 vi/vim 共分为三种模式,分别是

  • 命令模式(Command mode)
  • 输入模式(Insert mode)
  • 底线命令模式(Last line mode)

命令模式

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

#    i 切换到输入模式,以输入字符。
#    x 删除当前光标所在处的字符。
#    : 切换到底线命令模式,以在最底一行输入命令。
复制代码

输入模式

在命令模式下按下i就进入了输入模式。

在输入模式中,可以使用以下按键:

#    字符按键以及Shift组合,输入字符
#    ENTER,回车键,换行
#    BACK SPACE,退格键,删除光标前一个字符
#    DEL,删除键,删除光标后一个字符
#    方向键,在文本中移动光标
#    HOME/END,移动光标到行首/行尾
#    Page Up/Page Down,上/下翻页
#    Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
#    ESC,退出输入模式,切换到命令模式
复制代码

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

#    q 退出程序
#    w 保存文件
复制代码

按ESC键可随时退出底线命令模式。

打开文件、保存、关闭文件(命令模式下使用)

#:w       //保存文件
#:w vpser.net //保存至vpser.net文件
#:q          //退出编辑器,如果文件已修改请使用下面的命令
#:q!        //退出编辑器,且不保存
#:wq         //退出编辑器,且保存文件
复制代码

移动光标(命令模式下使用)

1、使用上下左右方向键

2、命令模式下:h 向左、j 向下 、k 向上、l 向右。 空格键 向右、Backspace 向左、Enter 移动到下一行首、- 移动到上一行首。

折腾二-vim插件安装

讲完(折腾)完vim的各个模式,各个功能后,我们终于来到了插件配置

说句大实话,vim不用装插件也能行。但但但是,没装插件的vim的使用体验比装了插件的vim还是差了点

先列出我的插件列表:

注意,不是每个插件都是必须安装的。

插件详解

  • Vundle

这个是著名的vim插件管理器,要安装插件必须先要安装它

官网教程

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim #先克隆vundle包
#然后编辑一下.vimrc 在头部加入以下内容
set nocompatible              “  必需
filetype off                  “ 必需
" 将运行时的路径设置为包括Vundle并初始化
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
” 使Vuldle管理自己
Plugin 'VundleVim/Vundle.vim'
....
"你所有的插件必需在这一行之前添加 格式就是Plugin '插件的GitHub路径'
call vundle#end()            " required
filetype plugin indent on    " required
复制代码

注意,安装插件的时间可能会很长(特别是YouCompleteMe),所以请提前下载几部动漫到本地,方便度过这一段漫长的无聊期……

  • 其他插件
Plugin 'Valloric/YouCompleteMe'    "自动补全"
Plugin 'nathanaelkane/vim-indent-guides'    "缩进显示"
Plugin 'fholgado/minibufexpl.vim'    "操作多个文件"
Plugin 'Yggdroot/indentLine'    "缩进指示线"
Plugin 'scrooloose/nerdtree'    "树形目录配置"
Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'majutsushi/tagbar'    "显示文件的类、函数、变量"
Plugin 'dyng/ctrlsf.vim'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'MattesGroeger/vim-bookmarks'
Plugin 'vim-syntastic/syntastic'    "语法检查"
Plugin 'dense-analysis/ale'    "语法检查"
复制代码

这里附上nerdtree的配置(用F2快捷键开关树形目录,可以自定义修改)

"将F2设置为开关NERDTree的快捷键
map <f2> :NERDTreeToggle<cr>
"窗口位置
let g:NERDTreeWinPos='left'
"窗口尺寸
let g:NERDTreeSize=30
复制代码

我的.vimrc


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vundle
set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
"Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
"Plugin 'L9'
" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Avoid a name conflict with L9
"Plugin 'user/L9', {'name': 'newL9'}
" All of your Plugins must be added before the following line
call vundle#end()            " required
" NerdTree插件的配置信息
"将F2设置为开关NERDTree的快捷键
map <f2> :NERDTreeToggle<cr>
"窗口位置
let g:NERDTreeWinPos='left'
"窗口尺寸
let g:NERDTreeSize=30
filetype plugin on    " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line

set nocompatible              " be iMproved, required

filetype off                  " required

" set the runtime path to include Vundle and initialize

set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

Plugin 'VundleVim/Vundle.vim'    "vundle插件"
Plugin 'Valloric/YouCompleteMe'    "自动补全"
Plugin 'nathanaelkane/vim-indent-guides'    "缩进显示"
Plugin 'fholgado/minibufexpl.vim'    "操作多个文件"
Plugin 'Yggdroot/indentLine'    "缩进指示线"
Plugin 'scrooloose/nerdtree'    "树形目录配置"
Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'majutsushi/tagbar'    "显示文件的类、函数、变量"
Plugin 'dyng/ctrlsf.vim'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'MattesGroeger/vim-bookmarks'
Plugin 'vim-syntastic/syntastic'    "语法检查"
Plugin 'dense-analysis/ale'    "语法检查"

call vundle#end() 

filetype plugin indent on 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Configuration file for vim

set modelines=0		" CVE-2007-2438

" Normally we use vim-extensions. If you want true vi-compatibility
" remove change the following statements
set nocompatible	" Use Vim defaults instead of 100% vi compatibility
set backspace=2		" more powerful backspacing

" Don't write backup file if vim is being called by "crontab -e"
au BufWrite /private/tmp/crontab.* set nowritebackup nobackup
" Don't write backup file if vim is being called by "chpass"
au BufWrite /private/etc/pw.* set nowritebackup nobackup

let skip_defaults_vim=1
colorscheme evening     " 设置颜色主题

syntax on               " 语法高亮

filetype on             " 检测文件的类型

set number              " 显示行号
set cursorline          " 用浅色高亮当前行
"autocmd InsertLeave * se nocul
"autocmd InsertEnter * se cul

set ruler               " 在编辑过程中,在右下角显示光标位置的状态行
set laststatus=2        " 显示状态栏 (默认值为 1, 无法显示状态栏)
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\
                        " 设置在状态行显示的信息

set tabstop=4           " Tab键的宽度
set softtabstop=4
set shiftwidth=4        " 统一缩进为4

set autoindent          " vim使用自动对齐,也就是把当前行的对齐格式应用到下一行(自动缩进)
set cindent             " (cindent是特别针对 C语言语法自动缩进)
set smartindent         " 依据上面的对齐格式,智能的选择对齐方式,对于类似C语言编写上有用

set scrolloff=3         " 光标移动到buffer的顶部和底部时保持3行距离

set incsearch           " 输入搜索内容时就显示搜索结果
set hlsearch            " 搜索时高亮显示被找到的文本

set foldmethod=indent   " 设置缩进折叠
set foldlevel=99        " 设置折叠层数
set mouse=a

set linespace=6

set matchtime=1
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
                        " 用空格键来开关折叠

" 自动跳转到上次退出的位置
if has("autocmd")
    au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
复制代码

后记


其实也有一个极力的插件kite,但是博主的Mac上需要从pc6上下载kite软件,然后再点击里面vim对应的Install按钮安装。 请在下方的评论区打出你们的kite插件的安装方式~ ↓ ↓ ↓

最后说一句,那个vim键位图是仅供老鸟们深修的,如果您是一位新手(用大白话讲,就是菜鸟)那么键盘图就适合用来装X,用不用都没关系。

作者主页 欢迎转发关注和收藏!🙂

文章分类
开发工具
文章标签