.vimrc 基本配置

" 定义快捷键的前缀,即<Leader>
let mapleader=";"
" 启用:Man命令查看各类man信息

source $VIMRUNTIME/ftplugin/man.vim

" 定义:Man命令查看各类man信息的快捷键

nmap <Leader>man :Man 3 <cword><CR>

" 映射之后就可以少按一下 Shift 键。

cmap man Man

" 开启文件类型侦测
filetype on
" 根据侦测到的不同类型加载对应的插件
filetype plugin on
" 开启实时搜索功能
set incsearch
" 搜索时大小写不敏感
set ignorecase
" 关闭兼容模式
set nocompatible
set backspace=indent,eol,start
" vim 自身命令行模式智能补全
set wildmenu
syntax on " 语法高亮
"set ignorecase " 搜索模式里忽略大小写
set autoindent " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置

set smartindent " 智能对齐方式

"au FileType c, cpp setlocal smartindent 

filetype plugin indent on

set tabstop=4 " 设置制表符(tab键)的宽度
set softtabstop=4 " 设置软制表符的宽度

set shiftwidth=4 " (自动) 缩进使用的4个空格

"au FileType c, cpp setlocal cindent 

set cindent " 使用 C/C++ 语言的自动缩进方式

"au FileType c, cpp setlocal cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s

set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "设置C/C++语言的具体缩进方式
"set backspace=2 " 设置退格键可用
set showmatch " 设置匹配模式,显示匹配的括号
set linebreak " 整词换行
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
"set hidden " Hide buffers when they are abandoned

set mouse=a " Enable mouse usage (all modes) "使用鼠标

set mouse=v " 使用鼠标粘贴

set number " Enable line number "显示行号
"set previewwindow " 标识预览窗口
set history=50 " set command history to 50 "历史记录50条
"--状态行设置--

set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行

" 获取当前路径,将$HOME转化为~  
function! CurDir()  
        let curdir = substitute(getcwd(), $HOME, "~", "g")  
        return curdir  
endfunction
"在状态栏上显示当前打开文件的绝对路径
set statusline=%{CurDir()}\/%f%m%r%h 

set ruler " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。
"--命令行设置--
set showcmd " 命令行显示输入的命令
set showmode " 命令行显示vim当前模式
set incsearch " 输入字符串就显示匹配点

set hlsearch " 高亮显示搜索结果

set splitright " 竖直分屏时,在右侧新建缓冲区, 同理也可以设置 splitbelow

" 高亮显示当前行/列

"set cursorline
"set cursorcolumn
" 禁止显示菜单和工具条
set guioptions-=m

set guioptions-=T

" 禁止生成 .swp 文件

set noswapfile

set maxmempattern=100000

set textwidth=100 " 在文本行超过一定长度时自动换行

" 窗体改变时,分屏保持等宽

autocmd VimResized * exec "normal!\<c-w>=" 

 

nmap <c-l> $

nmap <c-h> ^

nmap <c-j> 3j

nmap <c-k> 3k

imap <c-l> <ESC>$

imap <c-h> <ESC>^

vmap <c-l> $

vmap <c-h> ^

 

nmap <C-c> :w<CR> 

imap <C-c> <ESC>:w<CR> 

nmap <leader>q :q<CR>

"vmap d d:w<CR>

"nmap dd dd:w<CR>

 

 

"和系统剪贴板之间的拷贝粘贴 

"vmap <Leader>y "+y 

"vmap <Leader>d "+d 

"nmap <Leader>p "+p  

"nmap <Leader>P "+P 

"vmap <Leader>p "+p 

"vmap <Leader>P "+P

 

inoremap { {}<left>

inoremap {<CR> {<CR>}<ESC>O

inoremap [ []<left>

inoremap ( ()<left>

inoremap " ""<left>

inoremap ' ''<left>

inoremap ` ``<left>

 

 

 

set pastetoggle=<F11> 


" 针对 golang 代码,在 {} 中按回车,换行 2 次,光标停在第二行中间

 function! s:InsertNLBetweenCurlyBraces()
    if strpart(getline('.'), col('.') - 2, 2) == '{}'
        return "\<CR>\<CR>\<Up>\<Tab>"
    endif
    return "\<CR>"
endfun


autocmd FileType go inoremap <CR> <C-R>=<SID>InsertNLBetweenCurlyBraces()<CR> 

 

 

 


"在 GVIM 中 shift + insert 生效
if has("gui_running")
    map  <silent>  <S-Insert>  "+p
    imap <silent>  <S-Insert>  <Esc>"+pa
endif

 

 

 

 

" 分屏窗口移动

map <leader>jj <C-W>j   //这个快捷键已经被占用
map <leader>kk <C-W>k
map <leader>hh <C-W>h
map <leader>ll <C-W>l

 

" tmux 设置

if exists('$TMUX')
  set term=screen-256color

endif

 

 

 

" ====================================================== vim 标签页 设置

" 来自 https://zhuanlan.zhihu.com/p/20902166

noremap <silent><tab>n :tabn<cr>
noremap <silent><tab>p :tabp<cr>
noremap <silent><s-tab> :tabnext<CR>


" make tabline in terminal mode
function! Vim_NeatTabLine()
    let s = ''
    for i in range(tabpagenr('$'))
        " select the highlighting
        if i + 1 == tabpagenr()
            let s .= '%#TabLineSel#'
        else
            let s .= '%#TabLine#'
        endif
        " set the tab page number (for mouse clicks)
        let s .= '%' . (i + 1) . 'T'
        " the label is made by MyTabLabel()
        let s .= ' %{Vim_NeatTabLabel(' . (i + 1) . ')} '
    endfor
    " after the last tab fill with TabLineFill and reset tab page nr
    let s .= '%#TabLineFill#%T'
    " right-align the label to close the current tab page
    if tabpagenr('$') > 1
        let s .= '%=%#TabLine#%999XX'
    endif
    return s
endfunc
 
" get a single tab name 
function! Vim_NeatBuffer(bufnr, fullname)
    let l:name = bufname(a:bufnr)
    if getbufvar(a:bufnr, '&modifiable')
        if l:name == ''
            return '[No Name]'
        else
            if a:fullname 
                return fnamemodify(l:name, ':p')
            else
                return fnamemodify(l:name, ':t')
            endif
        endif
    else
        let l:buftype = getbufvar(a:bufnr, '&buftype')
        if l:buftype == 'quickfix'
            return '[Quickfix]'
        elseif l:name != ''
            if a:fullname 
                return '-'.fnamemodify(l:name, ':p')
            else
                return '-'.fnamemodify(l:name, ':t')
            endif
        else
        endif
        return '[No Name]'
    endif
endfunc
 
" get a single tab label
function! Vim_NeatTabLabel(n)
    let l:buflist = tabpagebuflist(a:n)
    let l:winnr = tabpagewinnr(a:n)
    let l:bufnr = l:buflist[l:winnr - 1]
    return Vim_NeatBuffer(l:bufnr, 0)
endfunc
 
" get a single tab label in gui
function! Vim_NeatGuiTabLabel()
    let l:num = v:lnum
    let l:buflist = tabpagebuflist(l:num)
    let l:winnr = tabpagewinnr(l:num)
    let l:bufnr = l:buflist[l:winnr - 1]
    return Vim_NeatBuffer(l:bufnr, 0)
endfunc
 
" setup new tabline, just like %M%t in macvim
set tabline=%!Vim_NeatTabLine()
set guitablabel=%{Vim_NeatGuiTabLabel()}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值