fedora下vim配置


一、安裝

1)dnf安裝

fedora22以下

sudo yum install vim

fedora22及以上

sudo dnf install vim

如果遇到下面類似的錯誤

file /usr/share/man/man1/vim.1.gz from install of vim-common-2:7.4.1718-1.fc22.x86_64 conflicts with file from package vim-minimal-2:7.4.640-4.fc22.x86_64

運行如下命令,升級vi

sudo dnf update vi

用這種方式安裝,vim是在安裝在/usr/share/vim

 

2)源碼安裝

ftp下載

wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2

下載到本地的是一個vim-7.4.tar.bz2,所以要解壓

解壓

tar -jxvf vim-7.4.tar.bz2

解壓后會在當前目錄得到vim74文件夾,切換到vim74目錄

cd vim74

編譯前的配置

./configure --prefix=/opt/vim --with-x --enable-gui=gnome2  --with-features=huge --disable-selinux --enable-multibyte

配置選項說明,可以運行./configure --help來查看全部配置選項

--prefix=/opt/vim                         安裝路徑

--with-x --enable-gui=gnome2    生成gvim

--with-features=huge                  支持最大特性

--disable-selinux                         編譯時不檢查是否支持selinux

--enable-multibyte                      支持多字節

 

這里會要求安裝gcc編譯器,如果沒安裝就安裝

sudo dnf install gcc

配置時如果出現下面錯誤

no terminal library found
checking for tgetent()... configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with --with-tlib.

這是沒安裝ncurses庫,運行如下命令安裝

sudo dnf install ncurses-devel

需要重新配置可 運行如下命令,清理上一次編譯生成的所有文件

make distclean

配置后,編譯並且安裝

sudo make && make install

建立軟連接,即把剛剛安裝路徑加入到系統環境變量

mv /usr/bin/vim /usr/bin/vim_backup           # 先將原來的備份
ln -s /opt/vim/bin/vim /usr/bin/vim           # 建立軟鏈接

 

git下載

git clone https://github.com/vim/vim.git

克隆之后會在當前目錄得到vim文件夾,切換到vim目錄后,就和ftp下載的編譯一樣

cd vim

 

二、配置

准備工作

先在home目錄下,新建.vim目錄和.vimrc文件,vim默認配置文件是/etc/vimrc,這個是作用整個系統的,所以一般不改這個

切換到當前用戶的home目錄

cd ~

新建.vim目錄和.vimrc文件

 

mkdir .vim
touch .vimrc

切換到.vim目錄,然后新建bundle目錄

cd .vim
mkdir bundle

切換到bundle,從github克隆vundle到本地

cd bundle
git clone https://github.com/gmarik/vundle.git

切換到home目錄,編輯.vimrc配置文件

cd ~
vi .vimrc

 我的配置文件

插件說明

(1)vim-airline

vim-airline這個插件要用到特定的字體才能顯示特定的符號

運行下面命令下載字體

git clone https://github.com/powerline/fonts.git

克隆之后會在當前目錄得到fonts文件夾,切換到fonts,運行./install.sh安裝字體

cd fonts
./install.sh

打開終端,右鍵Profiles->Profiles Preferences,打開后就可以選擇終端字體了

 

(2)cscope

先查看vim是否開啟了cscope這個特性,運行如下命令,看到+cscope就表示開啟了,看到-cscope就表示沒開啟

vim --version | grep cscope

如果沒開啟就重新編譯vim,切換到下載vim源碼目錄,然后運行如下命令

./configure --enable-cscope
sudo make && make install

cscope的安裝,如果沒安裝的可以用下面命令安裝

sudo dnf install cscope

或者到https://sourceforge.net/projects/cscope/files/latest/download?source=files下載,下載后會得到cscope-15.8b.tar.gz壓縮包,解壓

tar -zxvf cscope-15.8b.tar.gz

解壓后得到cscope-15.8b文件夾,切換到cscope-15.8b目錄,然后配置,編譯,安裝

cd cscope-15.8b
./configure --prefix=/opt/cscope
sudo make && make install

cscope默認只解析C語言文件(即后綴為.c和.h文件)、lex文件(即后綴為.l文件)和yacc文件(即后綴為.y文件),所以要解析其他語言的文件,需要把這些文件名和完整路徑保存在cscope.files這個文件,我們可以在項目的根目錄運行下面命令來生成cscope.files

find . -type f > cscope.files

然后在生成cscope數據庫文件

cscope -bq

運行上面命令后,會在當前目錄生成cscope.out,cscope.in.out,cscope.po.out這3個文件

cscope常用的選項

-R: 遞歸生成數據庫文件

-b: 只生成數據庫文件,不進入cscope的界面

-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

-k: 在生成數據庫文件時,不搜索/usr/include目錄

-i: 如果保存文件列表的文件名不是cscope.files時,需要加此選項告訴cscope到哪兒去找源文件列表。可以使用”–“,表示由標准輸入獲得文件列表。

-I incdir: 在-I選項指出的目錄中查找頭文件

-u: 掃描所有文件,重新生成交叉數據庫文件

-C: 在搜索時忽略大小寫

-P path: 在以相對路徑表示的文件前加上的path,這樣,你不用切換到你數據庫文件所在的目錄也可以使用它了

 我的vim配置文件

"使用vundle來管理插件,要求filetype off,set nocompatible

" This is not stage
" 偵測文件類型
filetype off

"關閉兼容模式
set nocompatible

"定義<leader>
let mapleader=","

"vundle的配置必須要放在vimrc文件的最前面,只有vundle插件運行之后,
"安裝vundle
"git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
"這樣才能加載其他插件
"運行時路徑,runtimepath
set rtp+=~/.vim/bundle/vundle/ 

"vundle開始配置
call vundle#rc()

"讓vundle管理插件
Bundle 'gmarik/vundle'

"自定義的插件

"github上其他用戶的插件,按下面格式寫,github用戶名/插件名
"Bundle 'tpope/vim-fugitive'
Bundle 'altercation/vim-colors-solarized'
Bundle 'kien/ctrlp.vim'
Bundle 'vim-airline/vim-airline'
Bundle 'vim-airline/vim-airline-themes'
Bundle 'majutsushi/tagbar'
Bundle 'Valloric/YouCompleteMe'
Bundle 'SirVer/ultisnips'
Bundle 'tomasr/molokai'
Bundle 'scrooloose/nerdtree'
Bundle 'scrooloose/syntastic'
Bundle 'ervandew/supertab'
Bundle 'honza/vim-snippets'
Bundle 'mattn/emmet-vim'
Bundle 'tpope/vim-fugitive'
Bundle 'spf13/PIV'
Bundle 'tpope/vim-surround'
Bundle 'Raimondi/delimitMate'
Bundle 'scrooloose/nerdcommenter'
Bundle 'godlygeek/tabular'
Bundle 'easymotion/vim-easymotion'
Bundle 'joonty/vdebug'
Bundle 'airblade/vim-gitgutter'
Bundle 'Shougo/neocomplete.vim'
Bundle 'kien/rainbow_parentheses.vim'
Bundle 'sjl/gundo.vim'




"aaaaa,github上的vim-scripts用戶的插件,按下面格式寫,直接寫插件名
Bundle 'taglist.vim'
Bundle 'TaskList.vim'


"不是github上的,按下面格式寫
"Bundle 'git://git.wincent.com/command-t.git'

"Brief help
  ":BundleList -顯示vimrc里面填寫的所有插件名稱
  ":BundleInstall(!) -自動下載安裝或更新插件 
  ":BundleSearch(!) foo -搜索插件foo
  ":BundleClean(!) -移出插件
  ":help vundle -查看幫助
"End brief help

""""""""""""""""
""""配置插件""""
""""""""""""""""

"ctrlp插件,g:代表全局變量,l:代表本地變量,s:代表腳本變量
let g:ctrlp_map='<c-p>'
let g:ctrlp_cmd='CtrlP'
let g:ctrlp_working_path_mode='ra'

"vim-airline插件
set laststatus=2
set t_Co=256
let g:airline_theme="luna"
let g:airline_powerline_fonts=1
let g:airline#extension#tabline#enabled=1
let g:airline#extension#tabline#left_sep=' '
let g:airline#extension#tabline#left_alt_sep='|'

"nerdtree插件
map <F2> :NERDTreeToggle<CR>

"taglist插件
let Tlist_Auto_update=1
let Tlist_Auto_open=0
let Tlist_Use_Right_Window=1
let Tlist_Show_One_File=0
let Tlist_File_Fold_Auto_Close=0
let Tlist_Exit_OnlyWindow=1
map <F4> :TlistToggle<CR>

"TaskList插件
"map <leader>td <Plug>TaskList

"tagbar插件
map <F3> :TagbarToggle<CR>

"ctags
set tags=tags;

"syntastic插件
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list=1
let g:syntastic_auto_loc_list=1
let g:syntastic_check_on_open=1
let g:syntastic_check_on_wq=0

"vim-fugitive插件
":help fugitive查看幫助

"PIV插件
"shift+k查看PHP手冊


"nerdcommenter插件
"一些快捷鍵
"<leader>cc        注釋
"<leader>cu        反注釋
"<leader>c<space>  注釋開關
"<leader>cs        塊注釋

"rainbow_parentheses插件
let g:rbpt_colorpairs = [
            \['brown','RoyalBlue3'],
            \['Darkblue','SeaGreen3'],
            \['darkgray','DarkOrchid3'],
            \['darkgreen','firebrick3'],
            \['darkcyan','RoyalBlue3'],
            \['darkred','SeaGreen3'],
            \['darkmagenta','DarkOrchid3'],
            \['brown','firebrick3'],
            \['gray','RoyalBlue3'],
            \['black','SeaGreen3'],
            \['darkmagenta','DarkOrchid3'],
            \['Darkblue','firebrick3'],
            \['darkgreen','RoyalBlue3'],
            \['darkcyan','SeaGreen3'],
            \['darkred','DarkOrchid3'],
            \['red','firebrick3'],
            \]
let g:rbpt_max=16
let g:rbpt_loadcmd_toggle=1
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces


"cscope插件
"cs find c|d|e|f|g|i|s|t name
"0 或 s  查找本 C 符號(可以跳過注釋)
"1 或 g  查找本定義
"2 或 d  查找本函數調用的函數
"3 或 c  查找調用本函數的函數
"4 或 t  查找本字符串
"6 或 e  查找本 egrep 模式
"7 或 f  查找本文件
"8 或 i  查找包含本文件的文件
if has("cscope") 
    ":tag,ctrl+],vim -t等命令會始終使用:cstag而不是:tag
    set cst
    "是否使用quickfix窗口來顯示cscope結果
    set cscopequickfix=s-,c-,d-,i-,t-,e-
    "指定cscope的路徑
    set csprg=/usr/bin/cscope
    "查找順序,0為先找cscope數據,找不到再找tag文件
    set csto=0
    "增加cscope數據庫時會提示信息
    set nocsverb
    "顯示查找結果的路徑的最后3個部分,包含本文件名
    set cspc=3
    "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
    "定義一些快捷鍵
    nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>  
    nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>  
    nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>  
    nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>  
    nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR>  
    nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR>  
    nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
    nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>  
    "查找結果,水平分割窗口
    nmap <C-@>s :scs find s <C-R>=expand("<cword>")<CR><CR> 
    nmap <C-@>g :scs find g <C-R>=expand("<cword>")<CR><CR> 
    nmap <C-@>c :scs find c <C-R>=expand("<cword>")<CR><CR> 
    nmap <C-@>t :scs find t <C-R>=expand("<cword>")<CR><CR> 
    nmap <C-@>e :scs find e <C-R>=expand("<cword>")<CR><CR> 
    nmap <C-@>f :scs find f <C-R>=expand("<cfile>")<CR><CR> 
    nmap <C-@>i :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>   
    nmap <C-@>d :scs find d <C-R>=expand("<cword>")<CR><CR> 
    "查找結果,豎直分割窗口
    nmap <C-@><C-@>s :vert scs find s <C-R>=expand("<cword>")<CR><CR>
    nmap <C-@><C-@>g :vert scs find g <C-R>=expand("<cword>")<CR><CR>
    nmap <C-@><C-@>c :vert scs find c <C-R>=expand("<cword>")<CR><CR>
    nmap <C-@><C-@>t :vert scs find t <C-R>=expand("<cword>")<CR><CR>
    nmap <C-@><C-@>e :vert scs find e <C-R>=expand("<cword>")<CR><CR>
    nmap <C-@><C-@>f :vert scs find f <C-R>=expand("<cfile>")<CR><CR>   
    nmap <C-@><C-@>i :vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR> 
    nmap <C-@><C-@>d :vert scs find d <C-R>=expand("<cword>")<CR><CR>

endif

"YouCompleteMe插件
let g:ycm_key_list_select_completion=['<C-n>','<Down>']
let g:ycm_key_list_previous_completion=['<C-p>','<Up>']
let g:ycm_complete_in_comments=1                      "補全功能在注釋中同樣有效
let g:ycm_confirm_extra_conf=0                        "允許vim加載.ycm_extra_conf.py文件,不再提示
let g:ycm_collect_identifiers_from_tags_files=1       "開啟ycm基於標簽引擎
let g:ycm_min_num_of_chars_for_completion=1           "從第一個鍵入字符就開始羅列匹配項
let g:ycm_cache_omnifunc=0                            "禁止緩存匹配項,每次都重新生成匹配項
let g:ycm_seed_identifiers_wity_syntax=1              "語法關鍵字補全
let g:ycm_error_symbol='>>'                           "錯誤提示符
let g:ycm_warning_symbol='>*'                         "警告提示符
set completeopt-=preview                              "補全內容不以分割子窗口形式出現,只顯示補全列表
nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>

"ultisnips插件
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"

"supertab插件
let g:SuperTabDefaultCompleteType='<C-n>'

"neocomplete插件
"Note: This option must set it in .vimrc(_vimrc).  NOT IN .gvimrc(_gvimrc)!
"" Disable AutoComplPop.
let g:acp_enableAtStartup = 0
" Use neocomplete.
let g:neocomplete#enable_at_startup = 1
" Use smartcase.
let g:neocomplete#enable_smart_case = 1
" Set minimum syntax keyword length.
let g:neocomplete#sources#syntax#min_keyword_length = 3
let g:neocomplete#lock_buffer_name_pattern = '\*ku\*'

" Define dictionary.
let g:neocomplete#sources#dictionary#dictionaries = {
    \ 'default' : '',
    \ 'vimshell' : $HOME.'/.vimshell_hist',
    \ 'scheme' : $HOME.'/.gosh_completions'
    \ }

" Define keyword.
if !exists('g:neocomplete#keyword_patterns')
    let g:neocomplete#keyword_patterns = {}
endif
let g:neocomplete#keyword_patterns['default'] = '\h\w*'
" Plugin key-mappings.
inoremap <expr><C-g> neocomplete#undo_completion()
inoremap <expr><C-l> neocomplete#complete_common_string()
" Recommended key-mappings.
" <CR>: close popup and save indent.
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
    return (pumvisible() ? "\<C-y>" : "" ) . "\<CR>"
    " For no inserting <CR> key.
    " return pumvisible() ? "\<C-y>" : "\<CR>"
endfunction
" <TAB>: completion.
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
" <C-h>, <BS>: close popup and delete backword char.
inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>"
" Close popup by <Space>.
"inoremap <expr><Space> pumvisible() ? "\<C-y>" : "\<Space>"
" AutoComplPop like behavior.
let g:neocomplete#enable_auto_select = 1
" Shell like behavior(not recommended).
"set completeopt+=longest
"let g:neocomplete#enable_auto_select = 1
"let g:neocomplete#disable_auto_complete = 1
"inoremap <expr><TAB>  pumvisible() ? "\<Down>" : "\<C-x>\<C-u>"

" Enable omni completion.
autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
autocmd FileType php setlocal omnifunc=phpcomplete#CompletePHP

" Enable heavy omni completion.
if !exists('g:neocomplete#sources#omni#input_patterns')
    let g:neocomplete#sources#omni#input_patterns = {}
endif
"let g:neocomplete#sources#omni#input_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
"let g:neocomplete#sources#omni#input_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)'
"let g:neocomplete#sources#omni#input_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::'

" For perlomni.vim setting.
" https://github.com/c9s/perlomni.vim
let g:neocomplete#sources#omni#input_patterns.perl = '\h\w*->\h\w*\|\h\w*::'

""""""""""""""""
""""公共設置""""
""""""""""""""""

"基於縮進或語法進行代碼縮進
set foldenable
"set foldmethod=indent
"set foldmethod=syntax
"set foldmethod=manual
set foldmethod=indent

"設置歷史記錄數
set history=1000

"在狀態行上顯示光標所在位置的行號和列號
set ruler

"顯示行號
set number

"輸入的命令顯示出來
set showcmd

"在狀態欄顯示當前的模式
set showmode

"命令行的高度
set cmdheight=2

"光標移動到buffer的頂部和底部時保持3行距離
set scrolloff=3

"在被分割的窗口間顯示空白,便於閱讀
"set fillchars=vert:/,stl:/,stlnc:/

"關閉滴滴答答的聲音
set noerrorbells

"不要閃爍
set novisualbell

"命令錯誤時,去掉響聲
set t_vb=

"啟動時不顯示援助烏干達兒童的提示
set shortmess=atI

" 語法高亮
syntax enable
syntax on


"配色方案為molokai
colorscheme molokai

"背景顏色
set background=dark

"突出顯示當前行
"set cursorline

"突出顯示當前列
"set cursorcolumn

"回格鍵刪除2個空格
set backspace=2

"允許backspace和光標鍵跨越行邊界
set whichwrap+=<,>,h,l


"按一次backspace就刪除4個空格了
set smarttab

"程序自動縮進的空白寬度,4個空格
set shiftwidth=4

"tab鍵的寬度,4個空格
set tabstop=4

"輸入tab鍵時實際占有的寬度
set softtabstop=4

"輸入tab鍵時替換為空格鍵
set expandtab

"自動縮進
set autoindent

"使用C/C++時自動縮進
set cindent

"智能縮進
set smartindent

"不生成備份文件,如index.html~ 
set nobackup

"不生成臨時文件,如index.swap
set noswapfile

"設置文件被修改時自動載入
set autoread

"自動保存
set autowrite

"根據編輯的文件自動切換工作目錄
set autochdir

"當前編輯的文件編碼
set fileencoding=urf-8

"gvim打開支持編碼的文件
set fileencodings=ucs-bom,utf-8,gbk,cp936,gb2312,big5,euc-jp,euc-kr,latin1

"gvim內部編碼
set encoding=utf-8

"設置終端編碼為gvim內部編碼encoding
let &termencoding=&encoding

"設置文件格式
set fileformats=unix,dos,mac

" 載入文件類型插件
filetype plugin on

" 為特定文件類型載入相關縮進文件
filetype indent on

"高亮顯示匹配的括號
set showmatch

"匹配括號高亮的時間,單位是十分之一秒
set matchtime=2

"搜索內容高亮顯示
set hlsearch

"實時匹配搜索內容
set incsearch

"搜索時忽略大小寫
set ignorecase

"搜索時智能忽略大小寫
set smartcase

"搜索時可以用正則表達式
set magic

"當運行宏時,不重繪
set lazyredraw

"搜索到文件兩端時不重新搜索
set nowrapscan

"帶有下面字符的單詞不要被換行分割
set iskeyword+=_,$,@,%,#,-,.

"gvim 配置
if has("gui_running")
    colorscheme solarized
endif

"設置字體
"set guifont=Bitstream_Vera_Sans_Mono:h12:cANSI
"set guifontwide=Yahei_Mono:h12:cGB2312
set guifont=Source\ Code\ Pro\ for\ Powerline\ Semibold\ 12

"設置gvim工具欄
"set guioptions=aegic


"使用中文幫助文檔
set helplang=cn

"解決consle輸出亂碼
language messages zh_CN.utf-8


"防止特殊符號無法正常顯示
set ambiwidth=double


"關閉上側工具欄
"set guioptions-=T

"關閉右側滾動條
"set guioptions-=r

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM