Vim的安装与配置(成功安装YouCompleteMe)

在此记录下探索了两天Linux的结果

Linux的安装

  在Win10下采用VMware安装虚拟机Ubuntu20.04,首先从清华源镜像中下载Ubuntu20.04iso文件(清华源镜像地址),随后从VMware中进行自定义安装(安装教程

Linux美化

  安装完了发现不太好看,找了各种方法,最后找到一个满意的Ubuntu20.04美化方法,全程5分钟!!!,美化后结果如下(美化教程)

  操作完了之后发现开机的登入界面背景变成了视频中眼镜小姐姐壁纸,而且输入密码会卡顿一段时间并且黑屏一秒钟再进入图形化界面,作为强迫症的我无法忍受,随后又再找怎么将登录界面恢复到原来模样的方法。

  默认情况下,Ubuntu的统一使用Lightdm显示管理器来处理它的登录屏幕。但安装的Gnome外壳或Xubuntu桌面还会安装GDM或MDM显示管理器,所以要回复原来的样子,最简单的就是一下两步
安装
$ sudo apt install lightdm

切换
$ sudo dpkg-reconfigure lightdm
PS:
  有可能在第一步安装完了之后就直接崩出了以下界面,这时候直接选择lightdm再敲回车就可以了,不用再执行上面说的切换命令。

vim、插件安装与vim的自定义配置配置

  本以为安装完Ubuntu就可以开始愉快的敲代码了,发现木有编辑器,后来了解到有一个完全适合Linux的许多人称宇宙第一编辑器的vim 😃 ,于是放弃了VScode准备尝尝新的环境。

安装vim

  直接使用命令进行安装:sudo apt install vim

配置vim

  下载好了以后要在打开vim配置文件.vimrc的隐藏根目录cd [空格],随后在该目录下创建一个.vim的文件夹,使用命令

    mkdir .vim
    cd .vim
  由于 .vim 为隐藏文件夹,所以在shell下使用ls无法查看到.vim文件夹,最后再在 .vim 文件夹中创建一个autoload文件夹,以便后面手动安装vim 管理软件vim-plug(为什么要手动安装 😃 ?)

  进入后开始安装vim管理软件vim-plug,由于该软件下载地址被墙了,直接使用命令安装失败并提示拒绝连接,所以采用手动安装,
首先从Ubuntu中的Firefox浏览器进入vim-pluggithub地址),随后在github中下载整个项目的zip文件。


  下载完成后在Ubuntu中直接解压,并打开,打开后如下


  随后将其中的plug.vim文件直接复制到之前已经创建好的autoload文件夹文件夹中就算直接安装好了vim管理软件vim-plug直接使用命令:
    cp ~/下载/vim-plug-master/plug.vim ~/.vim/autoload/
  这样就算安装好了vim管理软件vim-plug

vim-plus下载

  vim的自动代码补全插件YouCompleteMe号称最难安装的vim插件,其用vim插件管理软件vim-plug自动安装几乎不可能成功,主要原因是许多依赖的包都需要访问谷歌等外网,如果你可以“安全上网”,想要直接通过 .vimrc 中的:PlugInstall命令直接自动安装的同学可以直接查找资料,这类安装教程较多,下面我介绍不用“安全上网”或“手动安装”的方法。安装vimplus,其会自动帮你安装许多vim插件,但是几乎所有的vim插件都会安装失败,提示无法连接,但是唯独会成功安装YouCompleteMe 😃
  使用github连接安装vimplus同样会安装失败,但是可以使用gitee进行安装,使用以下命令安装,并打开.vimplus文件夹:
    git clone https://gitee.com/chxuan/vimplus.git ~/.vimplus
    cd ~/.vimplus

  随后执行

    sudo chmod +x ./install.sh
    ./install.sh

  然后我就去洗衣服去了...,回来之后YouCompleteMe就显示安装好了,安装好了以后进入YouCompleteMe插件文件夹,使用命令:

    cd ~/.vim/plugged/YouCompleteMe
    ./install.py --all

  但是根据我实践发现这样好像不可以成功安装所有,还要再执行以下命令:
    python3 install.py --clang-completer

编写vim配置文件.vimrc

  使用命令:
    vim ~/.vimrc
  随后就会看到以下内容


  该内容就是vimplus的自动配置内容,其中还有中文注释,利用vim在桌面新建一个mymymy_config文件并将该vimplus官方配置全部内容复制进去(不会的同学可以学习一下,vim果然好用 😃 ),以免后面玩着玩着没了 . . . ,最后:wq保存退出,大概操作如下所示:


  随后便是删除部分vimplus官方配置,留下自己想要的配置,其中包含许多通用配置、插件配置、快捷键设置等,并进行自己想要的配置。但是建议还是可以继续尝试一下我接下来的流程,应为里面的vimplus官方配置的YouCompleteMe代码不可以直接自动补全,且会出现不是全局配置等问题。确认保存好原有的官方配置后删除.vimrc中所有的内容,改为以下内容

" 自己的键位配置 "
let mapleader=" "
syntax on
set nonumber
set hlsearch
set wildmenu
set nosmartcase
set cursorline
exec "nohlsearch"
set ignorecase

set nocompatible
filetype on
filetype indent on
filetype plugin on
filetype plugin indent on
set mouse=a
set encoding=utf-8
let &t_ut=''
set expandtab
set tabstop=2
set shiftwidth=2
set softtabstop=2
set list
set listchars=tab:▸\ ,trail:▫
set scrolloff=5
set tw=0
set indentexpr=
set backspace=indent,eol,start
set foldmethod=indent
set foldlevel=99
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
set laststatus=2
set autochdir
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif

noremap H I
noremap i k
noremap j h
noremap k j
noremap h i
noremap I 5k
noremap K 5j
noremap = nzz
noremap - Nzz
noremap <LEADER><CR> :nohlsearch<>


map Q :q<CR>
map S :w<CR>
map s <nop>
map R :source $MYVIMRC<CR>
map sl :set splitright<CR>:vsplit<CR>	
map sj :set nosplitright<CR>:vsplit<CR>
map sk :set splitbelow<CR>:split<CR>
map si :set nosplitbelow<CR>:split<CR>
map <LEADER>l <C-w>l
map <LEADER>j <C-w>h
map <LEADER>i <C-w>k
map <LEADER>k <C-w>j
"修改删除操作,删除但不剪切
noremap <leader>d "_d

map <up> :res +5<CR>
map <down> :res -5<cR>>
map <right> :vertical resize-5<CR>
map <left> :vertical resize+5<CR>
map st :tabe<CR>
map tj :-tabnext<CR>
map tl :tabnext<CR>
map sv <C-w>t<C-w>H
map sh <C-w>t<C-w>K


call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'connorholyday/vim-snazzy'



" File navigation
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'Xuyuanp/nerdtree-git-plugin'

" Taglist
Plug 'majutsushi/tagbar', { 'on': 'TagbarOpenAutoClose' }

" Error checking
Plug 'w0rp/ale'

" Auto Complete
Plug 'Valloric/YouCompleteMe'

" Undo Tree
Plug 'mbbill/undotree/'

" Other visual enhancement
Plug 'nathanaelkane/vim-indent-guides'
Plug 'itchyny/vim-cursorword'

" Git
Plug 'rhysd/conflict-marker.vim'
Plug 'tpope/vim-fugitive'
Plug 'mhinz/vim-signify'
Plug 'gisphm/vim-gitignore', { 'for': ['gitignore', 'vim-plug'] }

" HTML, CSS, JavaScript, PHP, JSON, etc.
Plug 'elzr/vim-json'
Plug 'hail2u/vim-css3-syntax'
Plug 'spf13/PIV', { 'for' :['php', 'vim-plug'] }
Plug 'gko/vim-coloresque', { 'for': ['vim-plug', 'php', 'html', 'javascript', 'css', 'less'] }
Plug 'pangloss/vim-javascript', { 'for' :['javascript', 'vim-plug'] }
Plug 'mattn/emmet-vim'

" Python
Plug 'vim-scripts/indentpython.vim'

" Markdown
Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install_sync() }, 'for' :['markdown', 'vim-plug'] }
Plug 'dhruvasagar/vim-table-mode', { 'on': 'TableModeToggle' }
Plug 'vimwiki/vimwiki'

" Bookmarks
Plug 'kshenoy/vim-signature'

" Other useful utilities
Plug 'terryma/vim-multiple-cursors'
Plug 'junegunn/goyo.vim' " distraction free writing mode
Plug 'tpope/vim-surround' " type ysks' to wrap the word with '' or type cs'` to change 'word' to `word`
Plug 'godlygeek/tabular' " type ;Tabularize /= to align the =
Plug 'gcmt/wildfire.vim' " in Visual mode, type i' to select all text in '', or type i) i] i} ip
Plug 'scrooloose/nerdcommenter' " in <space>cc to comment a line

" Dependencies
Plug 'MarcWeber/vim-addon-mw-utils'
Plug 'kana/vim-textobj-user'
Plug 'fadein/vim-FIGlet'
Plug 'vim-airline/vim-airline'
Plug 'connorholyday/vim-snazzy' 
call plug#end()

" ===
" === NERDTree
" ===
map ff :NERDTreeToggle<CR>
let NERDTreeMapOpenExpl = ""
let NERDTreeMapUpdir = ""
let NERDTreeMapUpdirKeepOpen = "u"
let NERDTreeMapOpenSplit = ""
let NERDTreeOpenVSplit = ""
let NERDTreeMapActivateNode = "a"
let NERDTreeMapOpenInTab = "o"
let NERDTreeMapPreview = ""
let NERDTreeMapCloseDir = "n"
let NERDTreeMapChangeRoot = ""
" ==
" == NERDTree-git
" ==
let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ "Unknown"   : "?"
    \ }

" ===
" === You Complete ME
" ===
nnoremap gd :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap g/ :YcmCompleter GetDoc<CR>
nnoremap gt :YcmCompleter GetType<CR>
nnoremap gr :YcmCompleter GoToReferences<CR>


let g:ycm_autoclose_preview_window_after_completion=0
let g:ycm_autoclose_preview_window_after_insertion=1
let g:ycm_use_clangd = 0
let g:ycm_global_ycm_extra_conf = '~/.vim/.ycm_extra_conf.py'
let g:ycm_python_interpreter_path = "/usr/bin/python3.8"
let g:ycm_python_binary_path = "/usr/bin/python3.8"
let g:ycm_semantic_triggers =  {
  \   'c' : ['->', '.'],
  \   'objc' : ['->', '.', 're!\[[_a-zA-Z]+\w*\s', 're!^\s*[^\W\d]\w*\s',
  \             're!\[.*\]\s'],
  \   'ocaml' : ['.', '#'],
  \   'cpp,objcpp' : ['->', '.', '::'],
  \   'perl' : ['->'],
  \   'php' : ['->', '::'],
  \   'cs,java,javascript,typescript,d,python,perl6,scala,vb,elixir,go' : ['.'],
  \   'ruby' : ['.', '::'],
  \   'lua' : ['.', ':'],
  \   'erlang' : [':'],
  \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
	\ 'cs,lua,javascript': ['re!\w{2}'],
	\ }



" ===
" === ale
" ===
let b:ale_linters = ['pylint']
let b:ale_fixers = ['autopep8', 'yapf']


" ===
" === Taglist
" ===
map <silent> T :TagbarOpenAutoClose<CR>


" ===
" === MarkdownPreview
" ===
let g:mkdp_auto_start = 0
let g:mkdp_auto_close = 1
let g:mkdp_refresh_slow = 0
let g:mkdp_command_for_global = 0
let g:mkdp_open_to_the_world = 0
let g:mkdp_open_ip = ''
let g:mkdp_browser = 'chromium'
let g:mkdp_echo_preview_url = 0
let g:mkdp_browserfunc = ''
let g:mkdp_preview_options = {
    \ 'mkit': {},
    \ 'katex': {},
    \ 'uml': {},
    \ 'maid': {},
    \ 'disable_sync_scroll': 0,
    \ 'sync_scroll_type': 'middle',
    \ 'hide_yaml_meta': 1
    \ }
let g:mkdp_markdown_css = ''
let g:mkdp_highlight_css = ''
let g:mkdp_port = ''
let g:mkdp_page_title = '「${name}」'


" ===
" === vim-table-mode
" ===
map <LEADER>tm :TableModeToggle<CR>

" ===
" === Python-syntax
" ===
let g:python_highlight_all = 1
" let g:python_slow_sync = 0


" ===
" === vim-indent-guide
" ===
let g:indent_guides_guide_size = 1
let g:indent_guides_start_level = 2
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_color_change_percent = 1
silent! unmap <LEADER>ig
autocmd WinEnter * silent! unmap <LEADER>ig


" ===
" === Goyo
" ===
map <LEADER>gy :Goyo<CR>


" ===
" === vim-signiture
" ===
let g:SignatureMap = {
        \ 'Leader'             :  "m",
        \ 'PlaceNextMark'      :  "m,",
        \ 'ToggleMarkAtLine'   :  "m.",
        \ 'PurgeMarksAtLine'   :  "dm-",
        \ 'DeleteMark'         :  "dm",
        \ 'PurgeMarks'         :  "dm/",
        \ 'PurgeMarkers'       :  "dm?",
        \ 'GotoNextLineAlpha'  :  "m<LEADER>",
        \ 'GotoPrevLineAlpha'  :  "",
        \ 'GotoNextSpotAlpha'  :  "m<LEADER>",
        \ 'GotoPrevSpotAlpha'  :  "",
        \ 'GotoNextLineByPos'  :  "",
        \ 'GotoPrevLineByPos'  :  "",
        \ 'GotoNextSpotByPos'  :  "mn",
        \ 'GotoPrevSpotByPos'  :  "mp",
        \ 'GotoNextMarker'     :  "",
        \ 'GotoPrevMarker'     :  "",
        \ 'GotoNextMarkerAny'  :  "",
        \ 'GotoPrevMarkerAny'  :  "",
        \ 'ListLocalMarks'     :  "m/",
        \ 'ListLocalMarkers'   :  "m?"
        \ }


" ===
" === Undotree
" ===
let g:undotree_DiffAutoOpen = 0
map L :UndotreeToggle<CR>


  然后保存退出,然后就可以快乐的使用vimYouCompleteMe自动代码补全开始写代码了 😃 。

  如果想要安装其他的插件,可以使用命令直接使用在.vimrc加入以下代码,:

call plug#begin('~/.vim/plugged')
Plug 'Valloric/YouCompleteMe'
call plug#end()

  其中'Valloric/YouCompleteMe'为插件在github的地址(github.com/Valloric/YouCompleteMe)的后半段,再到vim编辑器中使用命令:PlugInstall,就会自动安装,但是由于github的原因,大概率一个都安装不上 😃 ,可用的方法是进入plugged文件夹:

    cd ~/.vim/plugged

  然后使用git在该文件夹下进行手动安装,git clone项目从gitee上面找对应的,这样就不会无法下载了,例如下载NERDTree插件,即在该文件下直接使用命令:
    git clone https://gitee.com/xixifui/nerdtree.git
  这样就算安装完成了

posted @ 2022-05-18 16:59  lalalap  阅读(1190)  评论(0编辑  收藏  举报