VIM 配置Step By Step------完整篇

功能说明

上节,对vim下的插件管理软件Vundle做了介绍,通过配置.vimrc文件以及执行:BundleInstall等命令,就可以方便的安装卸载插件,同时对于每个插件的配置项我们可以放在.vimrc下面,下面主要介绍我自己的.vimrc配置文件,在熟悉之后你可以根据自己的习惯自己定制自己的.vimrc。

配置界面如下:


.vimrc主界面分类说明:

  1. 配置文件由{{{}}}分隔为8类,按快捷键”za”打开关闭
  2. 将快捷键映射放在一类,便于查看更改(按照个人习惯定制)
  3. 通过配置Vundle选项,自动安装、卸载插件
  4. 在打开文件时根据文件类型,自动插入文件头标题
  5. vim自身配置选项部分分割为一类

快捷键映射说明

文件窗口操作

  1. F2 对比文件不同
  2. F3 创建新文件
  3. F4 更改文本格式对齐
  4. F5 编译程序
  5. F6 调试c程序
  6. F7 调试c++程序
  7. F9 打开属性目录(对应NerdTree插件)
  8. F10 打开函数变量列表 (对应TagBar插件)
  9. F11 全屏(默认不可修改)
  10. F12 与F10类似 (对应Taglist插件)

    nnoremap :vert diffsplit

    nnoremap :tabnew

    map gg=G

    map :call CompileRunGcc()

    map :call Rungdb()

    map :call Rungdbb()

    map :NERDTreeToggle

    map :TagbarToggle

    map :TlistToggle


变量查找跳转

  1. ,ct 生成ctag文件 (需要首先安装ctag,便于查找定义)
  2. ctrl+j 查找声明 (YouCompleteMe 插件)
  3. ctrl+k 查找定义 (同一个文件中,否则用ctrl+h)
  4. ctrl+l 先查找声明在查找定义 (YouCompleteMe 插件)
  5. ctrl+h 查找定义(ctag插件,首先得生成ctag文件)
  6. ctrl+o 返回上一次操作文件位置(YoucompleteMe插件)
  7. ctrl+t 返回上一次位置 (ctag文件)
  8. ctrl+i 前进到下一步操作文件位置(YoucompleteMe插件)
    map <leader>ct :!ctags -R . <cr> "generate Ctags sysbols
    map <c-j> :YcmCompleter GoToDeclaration<cr>
    map <c-k> :YcmCompleter GoToDefinition<cr>
    map <c-l> :YcmCompleter GoToDefinitionElseDeclaration<cr>
    map <c-h> <c-]>
    

:通过ctag、taglist、youcomplete插件将vim编辑器打造成一个强大的IDE环境,可以自动提示补全、查找定义声明自由跳转、一键编译运行调试、多窗口,同时窗口大小位置、快捷键都可以自己定制,使用起来非常方便,赶快抛弃你的SI吧


VIM自身快捷键

  1. ctrl+d —> ;j 向下翻半页,支持重映射,我映射为”;j”组合键
  2. ctrl+u —> ;k 向上翻半页
  3. ctrl+f 向上翻一页
  4. ctrl+b 向下翻一页
  5. ctrl+w+w 多窗口切换、前进
  6. ctrl+w+p 多窗口切换、后退
  7. dd 删除 dnd 向下删除n行
  8. yy 赋值当前行 p粘贴

注:这里就列这几个常用的快捷键,并不全,如果想用所有的vim自带的快捷点,找个vim教程看吧。同时原始的快捷键也可以重新映射。

推荐:笨办法学习vim

下面贴出整个.vimrc配置文件

augroup filetype_vim
    autocmd!
    autocmd FileType vim setlocal foldmethod=marker
    "use the marker method of folding for any Vimscript files
    "for instance : z-a open and close maker
augroup END
"快捷键映射 MAP -----------{{{
let mapleader = ","
let maplocalleader = "."
"<LocalLeader> is to be used for mappings which are local to a buffer.
nnoremap <F2> :vert diffsplit
nnoremap <F3> :tabnew<cr>
map <F4> gg=G

map <F5> :call CompileRunGcc()<cr>
map <f6> :call Rungdb()<cr>
map <f7> :call Rungdbb()<cr>

map <F9> :NERDTreeToggle<cr>
map <F10> :TagbarToggle<cr>
map <F12> :TlistToggle<cr>

map <leader>ct :!ctags -R . <cr> "generate Ctags sysbols
map <c-j> :YcmCompleter GoToDeclaration<cr>
map <c-k> :YcmCompleter GoToDefinition<cr>
map <c-l> :YcmCompleter GoToDefinitionElseDeclaration<cr>
map <c-h> <c-]>

"echo ">^.^<"
noremap - ddp
"move a row down
noremap _ ddkkp
"move a row up
nnoremap <leader>u viwU
"lowercase -> uppercase
inoremap <leader>u <esc>viwUi
nnoremap <leader>d dd
nnoremap <leader>ev :vsplit $MYVIMRC<cr>
nnoremap <leader>sv :source $MYVIMRC<cr>
inoremap jk <esc>
"   inoremap <esc> <nop>
"   noremap <left> <nop>
"   noremap <right> <nop>
"   noremap <up> <nop>
"   noremap <down> <nop>
noremap ;k <c-u>  "上半页
noremap ;j <c-d>   "下半页

" 映射全选+复制 ctrl+a
map <C-A> ggVGY
map! <C-A> <Esc>ggVGY
" 选中状态下 Ctrl+c 复制
vmap <C-c> "+y
"去空行  

"C,C++ 按F5编译运行
func! CompileRunGcc()
    exec "w"
    if &filetype == ‘c‘
        exec "!gcc % -I /home/ltf/apue/include -lpthread  /home/ltf/apue/lib/libapue.a -o  %<"
        exec "! ./%<"
    elseif &filetype == ‘cpp‘
        exec "!g++ % -std=c++11 -o %<"
        exec "! ./%<"
    elseif &filetype == ‘java‘
        exec "!javac %"
        exec "!java %<"
    elseif &filetype == ‘sh‘
        :!./%
    endif
endfunc
"C的调试 f6
func! Rungdb()
    exec "w"
    exec "!gcc % -g -o %<"
    exec "!gdb ./%<"
endfunc
" c++ debug f7
func! Rungdbb()
    exec "w"
    exec "!g++ % -g -std=c++11 -o %<"
    exec "!gdb ./%<"
endfunc
" }}}
" pathogen 插件管理软件 ----{{{
"filetype off
"
"call pathogen#infect()
"
"filetype plugin indent on
" }}}
" Vundle   插件管理软件 ----{{{
set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" other plugin to be installed
Plugin ‘gmarik/Vundle.vim‘
Plugin ‘tomasr/molokai‘
Plugin ‘scrooloose/nerdtree‘
Plugin ‘majutsushi/tagbar‘
Plugin ‘vim-scripts/taglist.vim‘
Plugin ‘klen/python-mode‘
"Plugin ‘tpope/vim-pathogen‘
Plugin ‘Valloric/YouCompleteMe‘

call vundle#end()
filetype plugin indent on
" }}}
"plugin config------------{{{
"YouCompleteMe config------------{{{
"don‘t show errorMsg
"let g:ycm_show_diagnostics_ui=0
" >>
let g:ycm_enable_diagnostic_signs = 1
let g:ycm_enable_diagnostic_highlighting = 0
" }}}
"Tagbar     config------------{{{
"
let g:tagbar_width = 30
let g:tagbar_left = 1 "by default on right side of vim
" }}}
"molokai    config--------------{{{
colorscheme molokai
highlight NonText guibg=#060606
highlight Folded  guibg=#0A0A0A guifg=#9090D0
"}}}
"ctaglist   config--------------{{{
let Tlist_Ctags_Cmd=‘ctags‘
let Tlist_Show_One_File=1        "不同时显示多个文件的tag,只显示当前文件的
let Tlist_WinWidth =28                    "设置taglist的宽度
let Tlist_Use_Right_Window=1            "在右侧窗口中显示taglist窗口
"let Tlist_Use_Left_Window =1                "在左侧窗口中显示taglist窗口
let Tlist_Exit_OnlyWindow = 1    "如果taglist窗口是最后一个窗口,则退出vim
"}}}
"NERD tree  config----------" {{{
let NERDChristmasTree=0
let NERDTreeWinSize=25
let NERDTreeChDirMode=2
let NERDTreeIgnore=[‘\~$‘,‘\.pyc$‘,‘\.swp$‘]
let NERDTreeShowBookmarks=1
let NERDTreeWinPos=‘left‘
"Automatically open a NERDTree if no files where specified
"autocmd vimenter * if !argc() | NERDTree | endif
" Close vim if the only window left open is a NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary")
"OPen a NERDTree
" }}}
" }}}
"新文件标题""  --------{{{
"新建.c,.h,.sh,.java文件,自动插入文件头
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
""定义函数SetTitle,自动插入文件头
func SetTitle()
    "如果文件类型为.sh文件
    if &filetype == ‘sh‘
        call setline(1,"\#########################################################################")
        call append(line("."), "\# File Name: ".expand("%"))
        call append(line(".")+1, "\# Author: ")
        call append(line(".")+2, "\# mail: @qq.com")
        call append(line(".")+3, "\# Created Time: ".strftime("%c"))
        call append(line(".")+4, "\#########################################################################")
        call append(line(".")+5, "\#!/bin/bash")
        call append(line(".")+6, "")
    else
        call setline(1, "/*************************************************************************")
        call append(line("."), "    > File Name: ".expand("%"))
        call append(line(".")+1, "    > Author: ltf")
        call append(line(".")+2, "    > Mail: @qq.com ")
        call append(line(".")+3, "    > Created Time: ".strftime("%c"))
        call append(line(".")+4, " ************************************************************************/")
        call append(line(".")+5, "")
    endif
    if &filetype == ‘cpp‘
        call append(line(".")+6, "#include<iostream>")
        call append(line(".")+7, "using namespace std;")
        call append(line(".")+8, "")
    endif
    if &filetype == ‘c‘
        call append(line(".")+6, "#include<stdio.h>")
        call append(line(".")+7, "")
    endif
    "新建文件后,自动定位到文件末尾
    autocmd BufNewFile * normal G
endfunc
"}}}
"自动匹配------------------{{{
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(‘)‘)<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair(‘}‘)<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(‘]‘)<CR>
":inoremap " ""<ESC>i
":inoremap ‘ ‘‘<ESC>i
function! ClosePair(char)
    if getline(‘.‘)[col(‘.‘) - 1] == a:char
        return "\<Right>"
    else
        return a:char
    endif
endfunction
"}}}
" 显示相关  --------{{{
set linespace=4
set guifont=Courier_New:h10:cANSI   " 设置字体
"syntax on           " 语法高亮
set number      " 显示行号
autocmd InsertLeave * se nocul  " 用浅色高亮当前行
autocmd InsertEnter * se cul    " 用浅色高亮当前行
set ruler            " 打开状态栏标尺
set laststatus=2    " 启动显示状态行(1),总是显示状态行(2)
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}   "状态行显示的内容
set cursorline              " 突出显示当前行
set guioptions-=T           " 隐藏工具栏
set guioptions-=m           " 隐藏菜单栏
set showcmd         " 输入的命令显示出来,看的清楚些
set cmdheight=1     " 命令行(在状态行下)的高度,设置为1
set novisualbell    " 不要闪烁(不明白)
" 显示中文帮助
if version >= 603
    set helplang=cn
    set encoding=utf-8
endif
"编码设置
set enc=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
"语言设置
set langmenu=zh_CN.UTF-8
set helplang=cn
" 在被分割的窗口间显示空白,便于阅读
set fillchars=vert:\ ,stl:\ ,stlnc:set termencoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936
set fileencoding=utf-8
" }}}
" 常用设置 ----------{{{
set autoread " 设置当文件被改动时自动载入
set clipboard+=unnamed "共享剪贴板
"set autowrite  "自动保存
set nocompatible  " 不要使用vi的键盘模式,而是vim自己的
set noeb " 去掉输入错误的提示声音
set confirm  " 在处理未保存或只读文件的时候,弹出确认
set autoindent " 自动缩进
set cindent
set tabstop=4  " Tab键的宽度
set softtabstop=4 " 统一缩进为4
set shiftwidth=4
set noexpandtab " 不要用空格代替制表符
set smarttab " 在行和段开始处使用制表符set history=1000  " 历史记录数
set nobackup "禁止生成临时文件
set noswapfile
set ignorecase  "搜索忽略大小写
set hlsearch "搜索逐字符高亮
set incsearch
set gdefault "行内替换
"filetype on  " 侦测文件类型
set viminfo+=! " 保存全局变量
set iskeyword+=_,$,@,%,#,-  " 带有如下符号的单词不要被换行分割
set linespace=0 " 字符间插入的像素行数目
set wildmenu " 增强模式中的命令行自动完成操作
set backspace=2 " 使回格键(backspace)正常处理indent, eol, start等
set whichwrap+=<,>,h,l " 允许backspace和光标键跨越行边界
set mouse=a  " 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
set selection=exclusive
set selectmode=mouse,key
set report=0 " 通过使用: commands命令,告诉我们文件的哪一行被改变过
set showmatch " 高亮显示匹配的括号
set matchtime=1 " 匹配括号高亮的时间(单位是十分之一秒)
set scrolloff=3 " 光标移动到buffer的顶部和底部时保持3行距离
set smartindent " 为C程序提供自动缩进
au BufRead,BufNewFile *  setfiletype txt  " 高亮显示普通txt文件(需要txt.vim脚本)
"}}}
时间: 2024-10-04 15:00:45

VIM 配置Step By Step------完整篇的相关文章

WPF Step By Step 完整布局介绍

WPF Step By Step 完整布局介绍 回顾 上一篇,我们介绍了基本控件及控件的重要属性和用法,我们本篇详细介绍WPF中的几种布局容器及每种布局容器的使用场景,当 然这些都是本人在实际项目中的使用经验,可能还存在错误之处,还请大家指出. 本文大纲 1.Grid 2.StackPanel 3.DockPanel 4.WrapPanel Grid 1.Row和Column 我们下面来介绍Grid的行的用法,及我们在UI设计过程中需要注意的细节. 由于前面我们在第一章中已经介绍了基本的关于Gr

Step by Step for configuration of sending customize IDOC/自定义IDOC发送配置

<div style="width: 600px; max-width: 100%; margin-bottom:5px;"><a href="https://docs.com/gan-gavin/6042/idoc-step-by-step-for-configuration-of-sending" title="自定义IDOC配置/Step by Step for configuration of sending customize

linux篇——centOs下的vim配置

一.配置vim的好处 进行vim配置,可以让我们在后续敲代码更加方便.按F5可以直接编译并执行C.C++代码以及执行shell脚本:按"F8"可进行C.C++代码的调试:"Ctrl + A"为全选并复制快捷键,方便复制代码:按"F2"可以直接消除代码中的空行:F3"可列出当前目录文件,打开树状文件目录:支持代码高亮,自动缩进,显示行号,显示状态行:按"Ctrl + P"可自动补全等等. 二.配置vim (1)下载vi

AD域控制器虚拟化完整篇

AD域控制器虚拟化完整篇 一.关于AD DC虚拟化的问题 1.时间同步问题 因为Kerberos身份验证依赖于可靠的时间,所以域中时间同步是非常重要的,如果进行DC虚拟化,时间会与hyper-v主机同步,这样就产生系列问题,所以建议禁用时间同步服务,确保有一个正确的时间同步配置. 2.虚拟机快照回滚 虚拟机快照回滚会产生两个问题: 1)USN(Update Sequence Number) AD利用USN来提供对目录更改的精确复制,每个DC维护一个64位的数字,在DC上对AD对象作任何更改,US

C++开发WPF,Step by Step

示例代码 使用C++来开发WPF,主要是如何在MFC(Win32)的窗口中Host WPF的Page.下面我就做个详细的介绍. 一.创建工程, 由于MFC的Wizard会生成很多用不到的代码,所以我准备从一个空的工程开始创建一个MFC的工程. a)         打开VS2005,菜单File->New->Projects-, 左面选择Visual C++->Win32,右面选择Win32 Console Application,给工程起个名字CPlusPlus_WPF, Ok进入下一

数据库设计 Step by Step (2)——数据库生命周期

引言:数据库设计 Step by Step (1)得到这么多朋友的关注着实出乎了我的意外.这也坚定了我把这一系列的博文写好的决心.近来工作上的事务比较繁重,加之我期望这个系列的文章能尽可能的系统.完整,需要花很多时间整理.思考数据库设计的各种资料,所以文章的更新速度可能会慢一些,也希望大家能够谅解. 系列的第二讲我们将站在高处俯瞰一下数据库的生命周期,了解数据库设计的整体流程 数据库生命周期 大家对软件生命周期较为熟悉,数据库也有其生命周期,如下图所示. 图(1)数据库生命周期 数据库的生命周期

Shell Step by Step (3) —— Stdin &amp;amp; if

4.输入输出 #! /bin/bash # Read users input and then get his name read -p "Please input your first name: " firstName read -p "Please input your last name: " lastName echo -e "Your full name is: $firstName $lastName" read使用方法: read

WinForm RDLC SubReport Step by step

最近在做的一个PO管理系统,因为要用到订单打印,没有用水晶报表,直接使用VS2010的Reporting.参考了网上的一些文章,但因为找到的数据是用于WebForm的,适配到WinForm有点区别,竟然花了很久才搞通.所以现在做个Step By Step以记录. 参考Jimmy.Yang的博文: http://www.cnblogs.com/yjmyzz/archive/2011/09/19/2180940.html 开发环境:      VS2010 C# 第一步,新建项目 2.在项目中新建数

WPF Step By Step 系列-Prism框架在项目中使用

WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Prism框架来构建基础的应用框架,并且如何来设计项目的架构和模块,下面我们就来一步步开始吧. 本文大纲 1.Prism框架下载和说明 2.Prism项目预览及简单介绍. 3.Prism框架如何在项目中使用. Prism框架下载和说明 Prism框架是针对WPF和Silverlight的MVVM框架,这

EF框架step by step(7)—Code First DataAnnotations(1)

Data annotation特性是在.NET 3.5中引进的,给ASP.NET web应用中的类提供了一种添加验证的方式.Code First允许你使用代码来建立实体框架模型,同时允许用Data annotation特性来配置类和属性的某些特性. 其实在前面的几篇文章中,有用到几个,在这一篇里,进行一次比较全面的介绍 Key EF框架要求每个实体必须有主键字段,他需要根据这个主键字段跟踪实体.CodeFirst方法在创建实体时,也必须指定主键字段,默认情况下属性被命名为ID.id或者[Clas