热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Vim配置详解

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

Linux下的编辑器以vim和emacs为主流,一个编辑器之神,一个是神的编辑器。本文以主要介绍如何在linux下以vim为基础搭建一个比较顺手的代码编辑器。

  • 有两种比较流行的方式:

自动安装
手动安装

  • 自动安装

  这种是方法是比较省事的方法,只要一个.vimrc配置文件就可以搞定所有的事情,一次配好即可。以后只要有这个配置文件,就可以走遍天下。
这种方式需要使用一个VIM插件管理工具来自动管理VIM插件的安装与卸载,笔者使用的Vundle来管理VIM插件,Vundle的全称是Vim Bundle,它是一款Vim插件管理工具。Vundle让你可以非常轻松地安装、更新、搜索和清理Vim插件。它还能管理你的运行时环境,并帮助标记。

    • 可以在Github上下载Vundle: https://github.com/VundleVim/Vundle.vim

下载完成后,解压到用户根目录的.vim目录下即可

    • 在终端(命令行)中使用git clone获取: git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

clone完成后, 会在用户根目录下多出来一个bundle目录,此时Vundle已经安装完成。安装好Vundle以后,就可以根据自己的需要安装插件了。Vundle提供了几种不同的插件安装方式,一般我们用到的插件在github都可以找到,因此最常用的一般就是直接找github上插件对应的仓名,添加到.vimrc中即可。然后打开vim,执行:PluginInstall命令,即可自动安装,等待Vundle执行完下载安装操作后,就可以开始享受VIM了。

笔者的.vimrc文件配置如下:

"===============================================================================================
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/'}

" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
"Plugin 'ascenator/L9', {'name': 'newL9'}

" All of your Plugins must be added before the following line

"============================ my plugins start =============================
Plugin 'scrooloose/nerdtree'
Plugin 'kien/ctrlp.vim'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'majutsushi/tagbar'
Plugin 'tacahiroy/ctrlp-funky'
Plugin 'jlanzarotta/bufexplorer'
Plugin 'easymotion/vim-easymotion'
Plugin 'haya14busa/incsearch.vim'
Plugin 'dkprice/vim-easygrep'
Plugin 'dyng/ctrlsf.vim'
Plugin 'Xuyuanp/nerdtree-git-plugin'
Plugin 'hfts/Porsche'
Plugin 'vim-scripts/OmniCppComplete'
Plugin 'vim-scripts/AutoComplPop'
Plugin 'scrooloose/nerdcommenter'

"============================ my plugins end ===============================

call vundle#end() " required
filetype plugin indent 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

"========== for vim ==============
syntax enable " 开启语法高亮
set t_Co=256 " 开启256色显示
set scrolloff=3 " 滚动时保持边距5行
set number " 开启行号显示
set mouse=a " 开启鼠标
set cmd 在处理未保存或只读文件的时候,弹出确认
set autoindent    " 自动缩进
set tabstop=4    " Tab键的宽度
set expandtab " 展开tab为空格
set softtabstop=4    " 统一缩进为4
set shift打开文件类型检测, 加了这句才可以用智能补全
set completeopt=longest,menu
set hlsearch " 高亮搜索
set laststatus=1 " 始终显示状态栏
set encoding=utf-8 "
set ignorecase " 搜索忽略大小写
set nopaste " 切换到正常模式
set list lcs=tab:\¦\ " 显示对齐线 | ¦ ┆ │

colorscheme Porsche

set cursorline
"hi cursorline cterm=none term=none
"autocmd WinEnter * setlocal cursorline
"autocmd WinLeave * setlocal nocursorline
"highlight CursorLine guibg=#30F010 ctermbg=189

"自动补全
:inoremap ( ()i
:inoremap ) =ClosePair(')')
:inoremap { {}O
:inoremap } =ClosePair('}')
:inoremap [ []i
:inoremap ] =ClosePair(']')
:inoremap " ""i
:inoremap ' ''i
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\"
else
return a:char
endif
endfunction"

"========== for quick key =======
" F11默认时全屏
nmap :NERDTreeToggle
nmap :TagbarToggle
nmap :ToggleBufExplorer
nmap :CtrlPFunky
nmap :set paste " 切换到粘贴模式
nmap :source ~/.vimrc
nmap ll :colorscheme Porsche
nmap jj :colorscheme space-vim-dark
nmap nm :set nonumber
nmap mn :set number
nmap ag :Ag
nmap ff ::shell

"========== for NERDTree ==============
"let g:NERDTree_title='NERD Tree'
"let g:winManagerWindowLayout='NERDTree|TagList,Tarbar'
autocmd vimenter * NERDTree
nmap wm :NERDTreeToggle
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") ) | q | endif
function! NERDTree_Start()
exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
return 1
endfunction
nmap mt :if IsWinManagerVisible() WMToggle else WMToggle:q endif "

"========== for CtrlP ===================
let g:ctrlp_map = ''
let g:ctrlp_cmd = 'CtrlP'
let g:ctrlp_working_path_mode = 'r'
let g:ctrlp_match_window = 'bottom,order:ttb,min:1,max:15,results:100'
let g:ctrlp_tabpage_position = 'al'
let g:ctrlp_working_path_mode = 'r'
let g:ctrlp_reuse_window = 'netrw\|help\|quickfix'
let g:ctrlp_open_new_file = 't'
let g:ctrlp_open_multiple_files = 'tjr'
let g:ctrlp_arg_map = 1
let g:ctrlp_extensiOns= ['tag', 'buffertag', 'quickfix', 'dir', 'rtscript',
\ 'undo', 'line', 'changes', 'mixed', 'bookmarkdir']
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.png,*.jpg,*.jpeg,*.gif " MacOSX/Linux
let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'

if executable('ag')
" Use Ag over Grep
set grepprg=ag\ --nogroup\ --nocolor
" Use ag in CtrlP for listing files.
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
" Ag is fast enough that CtrlP doesn't need to cache
let g:ctrlp_use_caching = 0
endif

"========== for CtrlPFunky ==============
nnoremap u :execute 'CtrlPFunky ' . expand('')
let g:ctrlp_extensiOns= ['funky']
let g:ctrlp_funky_syntax_highlight = 1
let g:ctrlp_funky_matchtype = 'path'
let g:ctrlp_funky_nerdtree_include_files = 1

"========== for vim-airline ==============
let g:airline_theme="light" "light
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'

"========== for EasyMotion ==============
" f{char} to move to {char}
map f (easymotion-bd-f)
nmap f (easymotion-overwin-f)
" s{char}{char} to move to {char}{char}
nmap s (easymotion-overwin-f2)
" Move to line
map L (easymotion-bd-jk)
nmap L (easymotion-overwin-line)
" Move to word
map w (easymotion-bd-w)
nmap w (easymotion-overwin-w)

"========== for insearch ==============
map / (incsearch-forward)
map ? (incsearch-backward)
map g/ (incsearch-stay)
nnoremap :nohlsearch
"set incsearch
set hlsearch
let g:incsearch#auto_nohlsearch = 0
map n (incsearch-nohl-n)
map N (incsearch-nohl-N)
map * (incsearch-nohl-*)
map # (incsearch-nohl-#)
map g* (incsearch-nohl-g*)
map g# (incsearch-nohl-g#)

"=========== for NERDTREE-GIT-PLUGIN =====
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ "Unknown" : "?"
\ }

"=========== cscope ===============
if has("cscope")
set csprg=/usr/local/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
endif
nmap s :cs find s =expand("")
nmap g :cs find g =expand("")
nmap c :cs find c =expand("")
nmap t :cs find t =expand("")
nmap e :cs find e =expand("")
nmap f :cs find f =expand("")
nmap i :cs find i ^=expand("")$
nmap d :cs find d =expand("")

"=========== omnicppcomplete ===============
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_NamespaceSearch = 2
let OmniCpp_DisplayMode = 1
let OmniCpp_ShowScopeInAbbr = 1
let OmniCpp_ShowPrototypeInAbbr = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_MayCompleteDot = 1
let OmniCpp_MayCompleteArrow = 1
let OmniCpp_MayCompleteScope = 1
let OmniCpp_MayCompleteScope = 1
let OmniCpp_SelectFirstItem = 1
let OmniCpp_DefaultNamespace=["std"]
let OmniCpp_SelectFirstItem = 2

"===============NERD Commenter=========================
let g:NERDSpaceDelims = 1 " Add spaces after comment delimiters by default
let g:NERDCompactSexyComs = 1 " Use compact syntax for prettified multi-line comments
let g:NERDDefaultAlign = 'left' " Align line-wise comment delimiters flush left instead of following code indentation
let g:NERDAltDelims_java = 1 " Set a language to use its alternate delimiters by default
let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } } " Add your own custom formats or override the defaults
let g:NERDCommentEmptyLines = 1 " Allow commenting and inverting empty lines (useful when commenting a region)
let g:NERDTrimTrailingWhitespace = 1 " Enable trimming of trailing whitespace when uncommenting
"===============================================================================================

  • 手动安装

手动安装,当然是要自己一个一个地安装插件了。这种方式的特点是需要自己一个一下下载vim插件,然后手动进行安装。虽然比较费事,但如果之前有vim插件安装包的备份文件,那就可以不依赖于网络。所以还是推荐在自己的本地留一份常用插件的安装包备份。手动安装的过程比较简单,基本上就是“下载-解压”,先从网卡下载好插件的压缩包,一般来说直接解压到.vim目录中即可。

笔者常用的几个插件如下,一般都可以在github上找到,其实从上面的配置文件中就可以找到笔者使用了哪些vim插件。
Plugin 'scrooloose/nerdtree'
Plugin 'kien/ctrlp.vim'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'majutsushi/tagbar'
Plugin 'tacahiroy/ctrlp-funky'
Plugin 'jlanzarotta/bufexplorer'
Plugin 'easymotion/vim-easymotion'
Plugin 'haya14busa/incsearch.vim'
Plugin 'dkprice/vim-easygrep'
Plugin 'dyng/ctrlsf.vim'
Plugin 'Xuyuanp/nerdtree-git-plugin'
Plugin 'hfts/Porsche'
Plugin 'vim-scripts/OmniCppComplete'
Plugin 'vim-scripts/AutoComplPop'
Plugin 'scrooloose/nerdcommenter'

最后,附上笔者vim的两张截图:

#

#

Vim入门基础知识集锦  http://www.linuxidc.com/Linux/2017-02/140903.htm

Vim入门基础教程 http://www.linuxidc.com/Linux/2017-02/140279.htm

把Vim打造成优秀的C++ IDE  http://www.linuxidc.com/Linux/2016-06/132262.htm

Ubuntu 14.04升级Vim7.4到8.0  http://www.linuxidc.com/Linux/2016-11/136816.htm

Vim安装youcompleteme自动补全插件  http://www.linuxidc.com/Linux/2016-11/137665.htm

Linux Vim编辑器使用简单讲解  http://www.linuxidc.com/Linux/2016-12/138930.htm

Vim文本编辑器  http://www.linuxidc.com/Linux/2017-03/142275.htm

Vim安装与配置进阶版 http://www.linuxidc.com/Linux/2017-03/141724.htm

Vim编辑器使用教程  http://www.linuxidc.com/Linux/2017-07/145885.htm

Ubuntu 16.04 Vim YouCompleteMe自动补全的安装配置与使用  http://www.linuxidc.com/Linux/2017-02/141088.htm

Linux文本编辑器Vim基础教程  http://www.linuxidc.com/Linux/2017-09/146930.htm

:http://www.linuxidc.com/Linux/2017-09/147109.htm 


推荐阅读
  • BashShell作为Linux的指定合作伙伴我们已经再熟悉不过了,使用Bash可以快速编写简单的脚本方便我们的日常比如善用vim,awk和sed三剑客,也可以创建十分复杂的逻辑, ... [详细]
  • 如何在Linux环境中高效地创建、编译与运行C语言代码
    本文面向第一次在linux尝试写C语言程序的新人。有经验的请绕行。C语言用法不是本文介绍的关键,本文只是引入如何第一次在linux系统下编写、编译和执行一个简单的c程序。学会后请自行深入 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 在Linux环境下,本文详细探讨了Apache服务器中CGI技术的应用与实现。首先,通过使用yum包管理器安装了必要的软件,如PHP。安装完成后,对Apache服务器进行了配置,确保CGI功能正常运行。此外,还介绍了如何编写和调试CGI脚本,以及如何在实际环境中部署这些脚本以提供动态网页内容。实验结果表明,通过合理的配置和优化,Apache服务器能够高效地支持CGI应用程序,为用户提供丰富的交互体验。 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • 深入解析:Android开发进阶之Vim编辑器基础操作与应用
    本文深入探讨了Android开发中使用Vim编辑器的基础操作与应用。通过详细解析Vim的基本命令、配置文件和常用插件,帮助开发者提高代码编写效率。文章还介绍了如何在Android开发环境中高效利用Vim,包括集成开发环境(IDE)的配置和常见问题的解决方法。适合初学者和有经验的开发者参考。 ... [详细]
  • 本文介绍了在Windows 10系统下使用VirtualBox虚拟机环境部署CentOS 7.2,并在其上安装Docker的具体步骤。针对宝塔面板在Docker容器中磁盘空间限制为8GB的问题,提供了详细的解决方案和优化建议,确保用户能够高效利用有限的存储资源。 ... [详细]
  • 黄聪:MySQL主从复制配置,实现高效读写分离
    大型网站为应对高并发访问,不仅需要在前端实现分布式负载均衡,还需在数据业务和访问层采取有效措施。采用传统的数据结构已无法满足需求,通过配置MySQL主从复制,可实现高效的读写分离,显著提升系统性能和稳定性。 ... [详细]
  • 前言: 网上搭建k8s的文章很多,但很多都无法按其说明在阿里云ecs服务器成功搭建,所以我就花了些时间基于自己成功搭建k8s的步骤写了个操作手册,希望对想搭建k8s环境的盆友有所帮 ... [详细]
  • 如何在Linux中配置环境变量:命令与脚本详解
    请关注本头条号,每天坚持更新原创干货技术文章。当您在Linux命令行上键入命令时,您实际是在告诉shell运行指定名称的可执行文件。在Linux中,这些可执行程序通常位于系统上的几 ... [详细]
  • 阿里云系统默认是关闭IPv6模块的,因此使用He.net所提供的TunnelBroker将其接入IPv6网络。下面开始修改系统配置,以便支持v6。操作前 ... [详细]
  • 这里是补充上一篇的Zabbix部署内容 一、centos系统 安装zabbixyum源 rpm-ihttps:repo.zabbix.comzabbix4.0rhel7x86_64 ... [详细]
  • 系统管理员可以通过多种方法实时监控Linux系统中的用户活动,包括当前已登录的用户及其正在进行的操作。利用特定的命令和工具,管理员可以轻松获取这些信息,确保系统的安全性和稳定性。例如,使用`who`、`w`或`last`等命令可以快速查看当前登录的用户及其活动详情。 ... [详细]
author-avatar
mobiledu2502905277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有