vim使用配置(转)
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有行号的、语法高亮度显示、智能缩进等功能的。
为了更好的在vim下进行工作,需要手动配置一个配置文件: .vimrc
在启动vim时,当前用户根目录下的 .vimrc 文件会被自动读取,该文件可以包含一些设置甚至脚本,所以,一般情况下把 .vimrc文件创建在当前用户的根目录下比较方便,即创建的命令为:
$vim ~/.vimrc
设置完成后
$:x 或者 $:wq
进行保存退出即可。
下面给出一个例子,已经很详细了,是某位大神的配置文件,这里对其表示敬意。
"双引号开始的行为注释行,下同。
" File: _vimrc
" Author: xuleaper<xuleaper@gmail.com>
" Description: xuleaper's personal vim config file.
" Last Modified: $Id: _vimrc 467 2012-09-08 03:49:05Z $
" Blog: http://www.gracecode.com/
" Since:2010-06-15
" History:
" 2012-06-08
" +vundle支持,更加灵活的管理插件
" 2012-01-20
" +整理vimrc结构
" 2011-09-08
" +在网络配置文件的基础上,编写自己的vimrc
"=============================
" vimrc_structure
" |
" +--Environment setting
" |
" +--Multi_language setting
" |
" +--GUI_laguage setting
" |
" +--AutoCmd
" |
" +--Plugin configure
" |
" +--Script's function
" |
" +--Key shortcut
" |
" ---Bundle setting
"=============================
if exists("mingcheng")
finish
endif
let g:mingcheng = 1
if v:version < 700
echoerr 'This _vimrc requires Vim 7 or later.'
quit
endif
" ============
" Environment
" ============
" Color Scheme
if has('syntax')
" 默认编辑器配色
au BufNewFile,BufRead,BufEnter,WinEnter * colo desert
" 各不同类型的文件配色不同
au BufNewFile,BufRead,BufEnter,WinEnter *.wiki colo void
" 保证语法高亮
syntax on
endif
" 保留历史记录
set history=500
" 行控制
set linebreak
set nocompatible
set textwidth=80
set wrap
" 标签页
set tabpagemax=9
set showtabline=2
" 控制台响铃
set noerrorbells
set novisualbell
set t_vb=
" 行号和标尺
set number
set ruler
set rulerformat=%15(%c%V\ %p%%%)
" 命令行于状态行
set ch=2
set stl=\ [File]\ %F%m%r%h%y[%{&fileformat},%{&fileencoding}]\ %w\ \ [PWD]\ %r%{GetPWD()}%h\ %=\ [Line]%l/%L\ %=\[%P]
set ls=2 " 始终显示状态行
set wildmenu "命令行补全以增强模式运行
" 定义 <Leader> 为逗号
let mapleader = ","
let maplocalleader = ","
" Search Option
set hlsearch " Highlight search things
set magic " Set magic on, for regular expressions
set showmatch " Show matching bracets when text indicator is over them
set mat=2 " How many tenths of a second to blink
set noincsearch
" 制表符
set tabstop=4
set expandtab
set smarttab
set shiftwidth=4
set softtabstop=4
" 状态栏显示目前所执行的指令
set showcmd
" 缩进
set autoindent
set smartindent
" 自动重新读入
set autoread
" 插入模式下使用 <BS>、<Del> <C-W> <C-U>
set backspace=indent,eol,start
" 设定在任何模式下鼠标都可用
" 自动改变当前目录
if has('netbeans_intg')
set autochdir
endif
" 备份和缓存
set nobackup
"set noswapfile
" 自动完成
set complete=.,w,b,k,t,i
set completeopt=longest,menu
" 代码折叠
set foldmethod=marker
" 共享外部剪贴板
set clipboard+=unnamed
"设置快速编辑.vimrc文件 ,e 编辑.vimrc
" 快速修改 vimrc 文件
if has("win32")
map <silent> <leader>e :e $VIM/_vimrc<cr>
else
map <silent> <leader>e :e $VIM/.vimrc<cr>
endif
"保存.vimrc文件后会自动调用新的.vimrc
autocmd! bufwritepost _vimrc source $VIM/_vimrc
" ======================
" Multi_language setting
" default encoding UTF
" ======================
if has("multi_byte")
set encoding=utf-8
"set fenc=cp936
" English messages only
"language messages zh_CN.utf-8
if has('win32')
language chinese
let &termencoding=&encoding
endif
set fencs=utf-8,gbk,chinese,latin1
set formatoptions+=mM
set nobomb " 不使用 Unicode 签名
if v:lang =~? '^\(zh\)\|\(ja\)\|\(ko\)'
set ambiwidth=double
endif
else
echoerr "Sorry, this version of (g)vim was not compiled with +multi_byte"
endif
" 永久撤销,Vim7.3 新特性
if has('persistent_undo')
set undofile
" 设置撤销文件的存放的目录
if has("unix")
set undodir=/tmp/,~/tmp,~/Temp
else
set undodir=d:/temp/
endif
set undolevels=1000
set undoreload=10000
endif
" Diff 模式的时候鼠标同步滚动 for Vim7.3
if has('cursorbind')
set cursorbind
end
"============
" GUI setting
" ===========
if has('gui_running')
" 只显示菜单
set guioptions=mcr
" 高亮光标所在的行
set cursorline
if has("win32")
" Windows 兼容配置
source $VIMRUNTIME/mswin.vim
source $VIMRUNTIME/menu.vim
source $ViMRUnTIME/delmenu.vim
" f11 最大化
nmap <f11> :call libcallnr('fullscreen.dll', 'ToggleFullScreen', 0)<cr>
nmap <Leader>ff :call libcallnr('fullscreen.dll', 'ToggleFullScreen', 0)<cr>
" 字体配置
exec 'set guifont='.iconv('Consolas', &enc, 'gbk').':h12:cANSI'
exec 'set guifontwide='.iconv('Microsoft\ YaHei', &enc, 'gbk').':h12:cGB2312'
endif
" Under Linux/Unix etc.
if has("unix") && !has('gui_macvim')
set guifont=Courier\ 10\ Pitch\ 11
endif
" Under the Mac(MacVim)
if has("mac") || has("gui_macvim")
if has("gui_macvim")
" MacVim 下的字体配置
set guifont=Courier_New:h14
set guifontwide=YouYuan:h14
" 半透明和窗口大小
set transparency=2
set lines=200 columns=120
" 使用 MacVim 原生的全屏幕功能
let s:lines=&lines
let s:columns=&columns
func! FullScreenEnter()
set lines=999 columns=999
set fu
endf
func! FullScreenLeave()
let &lines=s:lines
let &columns=s:columns
set nofu
endf
func! FullScreenToggle()
if &fullscreen
call FullScreenLeave()
else
call FullScreenEnter()
endif
endf
set guioptions+=e
" Mac 下,按 <Leader>ff 切换全屏
nmap <f11> :call FullScreenToggle()<cr>
nmap <Leader>ff :call FullScreenToggle()<cr>
" I like TCSH :^)
set shell=/bin/tcsh
" Set input method off
set imdisable
" Set QuickTemplatePath
let g:QuickTemplatePath = $HOME.'/.vim/templates/'
" 如果为空文件,则自动设置当前目录为桌面
lcd ~/Desktop/
endif
endif
endif
" =========
" AutoCmd
" =========
if has("autocmd")
filetype plugin indent on
" 括号自动补全
func! AutoClose()
:inoremap ( ()<ESC>i
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
:inoremap { {}<ESC>i
:inoremap [ []<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap ] <c-r>=ClosePair(']')<CR>
endf
func! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
"""""""""""""""""""""""""""""""""""""""""""""
augroup vimrcEx
au!
autocmd FileType text setlocal textwidth=80
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
augroup END
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Auto close quotation marks for PHP, Javascript, etc, file
au FileType php,javascript,c,cpp exe AutoClose()
" JavaScript 语法高亮
au FileType html,javascript let g:javascript_enable_domhtmlcss = 1
au BufRead,BufNewFile *.js setf jquery
" 给各语言文件添加 Dict
if has('win32')
let s:dict_dir = $VIM.'\vimfiles\dict\'
else
let s:dict_dir = $HOME."/.vim/dict/"
endif
let s:dict_dir = "setlocal dict+=".s:dict_dir
au FileType php exec s:dict_dir."php_funclist.dict"
au FileType css exec s:dict_dir."css.dict"
au FileType javascript exec s:dict_dir."javascript.dict"
" 格式化 JavaScript 文件
au FileType javascript map <f12> :call g:Jsbeautify()<cr>
au FileType javascript set omnifunc=javascriptcomplete#CompleteJS
" 增加 ActionScript 语法支持
au BufNewFile,BufRead,BufEnter,WinEnter,FileType *.as setf actionscript
" CSS3 语法支持
au BufRead,BufNewFile *.css set ft=css syntax=css3
" 增加 Objective-C 语法支持
au BufNewFile,BufRead,BufEnter,WinEnter,FileType *.m,*.h setf objc
" 将指定文件的换行符转换成 UNIX 格式
au FileType php,javascript,html,css,python,vim,vimwiki set ff=unix
" 自动最大化窗口
if has('gui_running')
if has("win32")
au GUIEnter * simalt ~x
"elseif has("unix")
"au GUIEnter * winpos 0 0
"set lines=999 columns=999
" 给 Win32 下的 gVim 窗口设置透明度
au GUIEnter * call libcallnr("vimtweak.dll", "SetAlpha", 225)
endif
endif
endif
" =================
" Plugin Configure
" =================
"neocomplcache setting
" VIM HTML 插件
let g:no_html_toolbar = 'yes'
"""""""""""""""""""""""""""""""""""""""""""""""""""""
" VimWiki 配置
if !exists("g:vimwiki_list")
let g:vimwiki_list = [
\{"path": "~/Wiki/Default/", "path_html": "~/Sites/wiki/",
\ "html_footer": "~/Wiki/Default/footer.tpl", "html_header": "~/Wiki/Default/header.tpl",
\ "auto_export": 1},
\{"path": "~/Wiki/WebWW/", "path_html": "~/Sites/webww/", "auto_export": 1}
\]
let g:vimwiki_auto_checkbox = 0
if has('win32')
" 注意!
" 1、如果在 Windows 下,盘符必须大写
" 2、路径末尾最好加上目录分隔符
let s:vimwiki_root = "$VIM/Vimwiki"
let g:vimwiki_list = [
\{"path": s:vimwiki_root."/Default/",
\ "html_footer": s:vimwiki_root."/Default/footer.html",
\ "html_header": s:vimwiki_root."/Default/header.html",
\ "path_html": s:vimwiki_root."/Default/_output/", "auto_export": 1},
\{"path": s:vimwiki_root."/WebWW/",
\"path_html": s:vimwiki_root."/WebWW/html/", "auto_export": 1}
\]
let g:vimwiki_w32_dir_enc = 'cp936'
endif
au FileType vimwiki set ff=unix fenc=utf8 noswapfile nobackup
"au FileType vimwiki imap <C-t> <c-r>=TriggerSnippet()<cr>
nmap <C-i><C-i> :VimwikiTabGoHome<cr>
nmap <Leader>ii :VimwikiTabGoHome<cr>
endif
" on Windows, default charset is gbk
if has("win32")
let g:fontsize#encoding = "cp936"
endif
""""""""""""""""""""""""""""""""""""
" PYTHON 相关的设置
"设置= + - * 前后自动空格
"设置,后面自动添加空格
au FileType python inoremap <buffer>= <c-r>=EqualSign('=')<CR>
au FileType python inoremap <buffer>+ <c-r>=EqualSign('+')<CR>
au FileType python inoremap <buffer>- <c-r>=EqualSign('-')<CR>
au FileType python inoremap <buffer>* <c-r>=EqualSign('*')<CR>
au FileType python inoremap <buffer>/ <c-r>=EqualSign('/')<CR>
au FileType python inoremap <buffer>> <c-r>=EqualSign('>')<CR>
au FileType python inoremap <buffer>< <c-r>=EqualSign('<')<CR>
au FileType python inoremap <buffer>: <c-r>=Swap()<CR>
au FileType python inoremap <buffer>, ,<space>
" ==================
" script's functions
"===================
" 获取当前目录
func! GetPWD()
return substitute(getcwd(), "", "", "g")
endf
" 跳过页头注释,到首行实际代码
func! GotoFirstEffectiveLine()
let l:c = 0
while l:c<line("$") && (
\ getline(l:c) =~ '^\s*$'
\ || synIDattr(synID(l:c, 1, 0), "name") =~ ".*Comment.*"
\ || synIDattr(synID(l:c, 1, 0), "name") =~ ".*PreProc$"
\ )
let l:c = l:c+1
endwhile
exe "normal ".l:c."Gz\<CR>"
endf
" 返回当前时期
func! GetDateStamp()
return strftime('%Y-%m-%d')
endfunction
" 全选
func! SelectAll()
let s:current = line('.')
exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
endfunc
" From an idea by Michael Naumann
func! VisualSearch(direction) range
let l:saved_reg = @"
execute "normal! vgvy"
let l:pattern = escape(@", '\\/.*$^~[]')
let l:pattern = substitute(l:pattern, "\n$", "", "")
if a:direction == 'b'
execute "normal ?" . l:pattern . "^M"
elseif a:direction == 'gv'
call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.')
elseif a:direction == 'f'
execute "normal /" . l:pattern . "^M"
endif
let @/ = l:pattern
let @" = l:saved_reg
endfunc
"函数后面加上!是防止vimrc文件重新载入时报错
"实现光标位置自动交换:) --> ):
function! Swap()
if getline('.')[col('.') - 1] =~ ")"
return "\<ESC>la:"
else
return ":"
endif
endf
""""""""""""""""""""""""""""""""""""""""
"实现+-*/前后自动添加空格,逗号后面自动添加空格,适用python
"支持+= -+ *= /+格式
function! EqualSign(char)
if a:char =~ '=' && getline('.') =~ ".*("
return a:char
endif
let ex1 = getline('.')[col('.') - 3]
let ex2 = getline('.')[col('.') - 2]
if ex1 =~ "[-=+><>\/\*]"
if ex2 !~ "\s"
return "\<ESC>i".a:char."\<SPACE>"
else
return "\<ESC>xa".a:char."\<SPACE>"
endif
else
if ex2 !~ "\s"
return "\<SPACE>".a:char."\<SPACE>\<ESC>a"
else
return a:char."\<SPACE>\<ESC>a"
endif
endif
endf
"""""""""""""""""""""""""""""""""""""""""""""""""""""""
"SwitchToBuf()实现它在所有标签页的窗口中查找指定的文件名,如果找到这样一个窗口,
"就跳到此窗口中;否则,它新建一个标签页来打开vimrc文件
"上面自动编辑.vimrc文件用到的函数
function! SwitchToBuf(filename)
let bufwinnr = bufwinnr(a:filename)
if bufwinnr != -1
exec bufwinnr . "wincmd w"
return
else
" find in each tab
tabfirst
let tab = 1
while tab <= tabpagenr("$")
let bufwinnr = bufwinnr(a:filename)
if bufwinnr != -1
exec "normal " . tab . "gt"
exec bufwinnr . "wincmd w"
return
endif
tabnext
let tab = tab + 1
endwhile
" not exist, new tab
exec "tabnew " . a:filename
endif
endfunction
""""""""""""""""""""""""""""""""""""""""""""""""""
"Last change用到的函数,返回时间,能够自动调整位置
function! TimeStamp(...)
let sbegin = ''
let send = ''
if a:0 >= 1
let sbegin = a:1.'\s*'
endif
if a:0 >= 2
let send = ' '.a:2
endif
let pattern = 'Last Change: .\+'
\. send
let pattern = '^\s*' . sbegin . pattern . '\s*$'
let now = strftime('%Y-%m-%d %H:%M:%S',
\localtime())
let row = search(pattern, 'n')
if row == 0
let now = a:1 . ' Last Change: '
\. now . send
call append(2, now)
else
let curstr = getline(row)
let col = match( curstr , 'Last')
let spacestr = repeat(' ',col - 1)
let now = a:1 . spacestr . 'Last Change: '
\. now . send
call setline(row, now)
endif
endfunction
" =============
" Key Shortcut
" =============
nmap <C-t> :tabnew<cr>
nmap <C-p> :tabprevious<cr>
nmap <C-n> :tabnext<cr>
nmap <C-k> :tabclose<cr>
nmap <C-Tab> :tabnext<cr>
for i in range(1, &tabpagemax)
exec 'nmap <A-'.i.'> '.i.'gt'
endfor
" 插件快捷键
nmap <C-d> :NERDTree<cr>
nmap <C-e> :BufExplorer<cr>
nmap <F2> :BufExplorer<cr>
" 插入模式按 F4 插入当前时间
imap <F4> <C-r>=GetDateStamp()<cr>
map <F6> zM " 关闭所有折
map <F7> zR " 打开所有折叠
nmap <F8> :TagbarToggle<cr>
map <F12> :!ctags -R<CR>
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
" 新建 XHTML 、PHP、Javascript 文件的快捷键
nmap <C-c><C-h> :NewQuickTemplateTab xhtml<cr>
nmap <C-c><C-p> :NewQuickTemplateTab php<cr>
nmap <C-c><C-j> :NewQuickTemplateTab javascript<cr>
nmap <C-c><C-c> :NewQuickTemplateTab css<cr>
nmap <Leader>ca :Calendar<cr>
nmap <Leader>mr :MRU<cr>
nmap <Leader>dd :NERDTreeToggle<cr>
nmap <Leader>bf :BufExplorer<cr>
nmap <Leader>tb :TagbarToggle<cr>
" 直接查看第一行生效的代码
nmap <C-g><C-f> :call GotoFirstEffectiveLine()<cr>
" 按下 Q 不进入 Ex 模式,而是退出
nmap Q :x<cr>
"==================
" Bundle setting
" =================
set nocompatible " be iMproved
filetype off " required!
set rtp+=$VIM/vimfiles/bundle/vundle/
"call vundle#rc('$VIM/vimfiles/bundle')
" let Vundle manage Vundle
" required!
" My Bundles here:
" original repos on github
"========================================
" non github repos
"========================================
"call pathogen#infect("$vim/vimfiles/bundle")
filetype plugin indent on " required!
vim使用配置(转)的更多相关文章
- [转] vim自定义配置 和 在ubnetu中安装vim
Ubuntu 12.04安装vim和配置 问题: ubuntu默认没有安装vim,出现: jyg@ubuntu:~$ vim test.cThe program 'vim' can be foun ...
- 为了让vi命令也可以使用vim的配置,需要修改 vi /etc/bashrc 增加一行 alias vi='vim'此时,经过上面配置已经可以显示语法高亮了
为了让vi命令也可以使用vim的配置,需要修改 vi /etc/bashrc 增加一行 aliasvi='vim'此时,经过上面配置已经可以显示语法高亮了
- linux环境下Vim的配置
原文链接:http://blog.chinaunix.net/uid-26826958-id-3272375.html (本文转自此链接中的部分内容,但做了适当修改) 安装vim命令:sudo ap ...
- windows下LINUX模拟终端Cypwin以及Vim的配置使用
Cypwin的安装 从官网下载相应版本后,直接安装. 官网地址:Cypwin 安装过程中可以选择相应的Packages,我们需要安装的Vim就需要在这一步中选择相应的包. Cypwin的使用 纯命令行 ...
- VIM简单配置
配置vim配置 编辑配置文件 feng@mint ~ $ vim ~/.vimrc 配置如下 主要配置为自动换行,设置行号,设置tab键为4个空格,同时将tab键自动转换成空格 set autoind ...
- macOS中Vim基本配置,颜色主题/语法/indent设置
macOS中Vim基本配置 Vim的初始化配置 .vimrc 存放位置 macOS 环境下 vim 的初始化配置文件为 .vimrc , 通常有两个(系统版本和用户版本),一个位于 /usr/shar ...
- vim基本配置备份
我的vim基本配置如下,在这里作个备份: set background=light syntax on set number set smartindent set expandtab set tab ...
- Linux - vim安装 配置与使用
一 Vim 简单介绍 曾经一直用vi,近期開始使用 vim,以下将两者做一下比較. vi和vim都是word=%E5%A4%9A%E6%A8%A1&fr=qb_search_exp&i ...
- vim 基础配置
最近在使用 python 搞服务, 简单配置了一个 vim, 配置了自动补全以及背景色 .(ps:搜狗输入法快捷键占用真是太坑爹,改用谷歌输入法,世界安静了) 具体配置如下: 一. 安装插件 1.克隆 ...
- VIM的配置以及插件管理
VIM的配置详细说明参考:http://www.ruanyifeng.com/blog/2018/09/vimrc.html 此外VIM的插件管理比如 Vundle可以参考这个博客: https:// ...
随机推荐
- Java多线程 | 02 | 线程同步机制
同步机制简介 线程同步机制是一套用于协调线程之间的数据访问的机制.该机制可以保障线程安全.Java平台提供的线程同步机制包括: 锁,volatile关键字,final关键字,static关键字,以 ...
- css 按钮悬停效霓虹灯特效
css 按钮悬停效霓虹灯特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=
- springcloud zuul shiro网关鉴权并向服务传递用户信息
1.pom文件 <dependencies> <!--eureka客户端--> <dependency> <groupId>org.springfram ...
- sqlalchemy 执行sql
关键需要使用text from sqlalchemy import create_engine, text sql = 'SELECT * FROM my_table WHERE account_id ...
- 关于 RocketMQ 事务消息的正确打开方式 → 你学废了吗
开心一刻 昨晚和一哥们一起吃夜宵,点了几瓶啤酒 不一会天空下起了小雨,哥们突然道:糟了 我:怎么了 哥们:外面下雨了,我老婆还在等着我去接她 他给了自己一巴掌,说道:真他妈不是个东西 我心想:哥们真是 ...
- [Vue]浅谈Vue3组合式API带来的好处以及选项API的坏处
前言 如果是经验不够多的同志在学习Vue的时候,在最开始会接触到Vue传统的方式(选项式API),后边会接触到Vue3的新方式 -- 组合式API.相信会有不少同志会陷入迷茫,因为我第一次听到新的名词 ...
- CSS学习笔记:grid布局
目录 一.Grid布局简介 二.Grid布局的一些概念 三. 容器元素属性 1. grid-template-* 1.1 网格行和列的设置 1.2 repeat的使用 1.3 使用fr 1.4 aut ...
- [noi1755]Trie
定义S对应的数组为$a_{i}=\min_{0\le j<i,S_{j}=S_{i}}i-j$,特别的,若不存在j,令$a_{i}=i$,那么容易发现存在双射关系就意味这两者对应的数组相同 因此 ...
- synchronized的一些理解
1. 两个普通的synchronized package ThreadTest; import java.util.concurrent.TimeUnit; public class ThreadTe ...
- 关于"丢失的牛"这个题的教学反思
某天上课讲到这样一个题:丢失的牛1~n,乱序排列,告诉从第二个位置到最后一个位置, 每个位置的前面的数字中比它小的数的个数,求每个位置的数字是多少N<=8000 FormatInput第一行给出 ...