# 把vim變成IDE

[Vundle](https://github.com/gmarik/Vundle.vim) 是一個可以自動下載、安裝與管理 Vim plugins 的工具，讓 Vim 的使用者可以很方便的使用各種 plugins。\
通常一個大型的 programming IDE，核心也是從文字編輯器開始，延伸其他的功能，合併成一個完整的 IDE。

{% embed url="<https://vimawesome.com/>" %}

{% embed url="<https://www.ostechnix.com/manage-vim-plugins-using-vundle-linux/>" %}

## vim --version

由於 Vundle 需要 git（用於下載 plugin）與 curl（用於搜尋 plugin）工具，所以在安裝 Vundle 之前要先安裝這兩個工具，若在 Ubuntu Linux 中可以使用 apt 安裝：

```
sudo apt-get install git curl 
mkdir -p ~/.vim/autoload ~/.vim/bundle
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
```

安裝 Vundle：

```
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
```

```
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
```

基本 \~/.vimrc

```bash
"自動縮排
set autoindent
"語法高亮
syntax on
"自動檢測文件類型並加載相關設置
filetype plugin indent on
"不自動換行
set nowrap
"智能對齊方式
set smartindent
"一個tab是4個byte
set tabstop=4
"按一次tab前進4個byte
set softtabstop=4
"顯示行號
set number
"預設不產生備份文件
set nobackup
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'nvie/vim-flake8'
Plugin 'valloric/youcompleteme'
call vundle#end()            " required
```

sudo apt install cmake

```
cd ~/.vim/bundle/youcompleteme  
./install.py --clang-completer  
```

最後，打開vim：

```
vim
```

並鍵入以下內容以安裝插件。

```
:PluginInstall
```

### .vimrc 進一步

```javascript
"自動縮排
set autoindent
"語法高亮
syntax on
"自動檢測文件類型並加載相關設置
filetype plugin indent on
"不自動換行
set nowrap
"智能對齊方式
set smartindent
"一個tab是4個byte
set tabstop=2
"按一次tab前進4個byte
set softtabstop=2
"顯示行號
set number
"預設不產生備份文件
set nobackup

set completeopt-=preview
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'nvie/vim-flake8'
" Python autocompletion, go to definition.
Plugin 'davidhalter/jedi-vim'
" Better autocompletion
Plugin 'Shougo/neocomplcache.vim'
" Automatically sort python imports
Plugin 'fisadev/vim-isort'
Plugin 't9md/vim-choosewin'
" Python and other languages code checker
Plugin 'scrooloose/syntastic'
" Paint css colors with the real color
Plugin 'lilydjwg/colorizer'
" Ack code search (requires ack installed in the system)
Plugin 'mileszs/ack.vim'
if has('python')
    " YAPF formatter for Python
    Plugin 'pignacio/vim-yapf-format'
endif
" XML/HTML tags navigation
Plugin 'vim-scripts/matchit.zip'
" Gvim colorscheme
Plugin 'vim-scripts/Wombat'
" Yank history navigation
Plugin 'vim-scripts/YankRing.vim'
"nodejs
Plugin 'myhere/vim-nodejs-complete'

call vundle#end()            " required
" most of them not documented because I'm not sure how they work
" (docs aren't good, had to do a lot of trial and error to make
" it play nice)
let g:neocomplcache_enable_at_startup = 1
let g:neocomplcache_enable_ignore_case = 1
let g:neocomplcache_enable_smart_case = 1
let g:neocomplcache_enable_auto_select = 1
let g:neocomplcache_enable_fuzzy_completion = 1
let g:neocomplcache_enable_camel_case_completion = 1
let g:neocomplcache_enable_underbar_completion = 1
let g:neocomplcache_fuzzy_completion_start_length = 1
let g:neocomplcache_auto_completion_start_length = 1
let g:neocomplcache_manual_completion_start_length = 1
let g:neocomplcache_min_keyword_length = 1
let g:neocomplcache_min_syntax_length = 1
" complete with workds from any opened file
let g:neocomplcache_same_filetype_lists = {}
let g:neocomplcache_same_filetype_lists._ = '_'

```

### 一行指令完成

### vim +PluginInstall +qall

### Vundle

Or use [Vundle](https://github.com/gmarik/Vundle.vim):

```
:BundleInstall moll/vim-node
:BundleInstall 'nikvdp/ejs-syntax'
```

建立以下的.vimrc

```bash
syntax on

set nocompatible
set smartindent
set shiftwidth=4
set backspace=indent,eol,start
set ruler
set number
set showcmd
set incsearch
set hlsearch
set hls
set ic
set pastetoggle=<F12>
set enc=utf8

set mouse=a

filetype off 

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/vundle



"-------------- PLUGINS STARTS -----------------
call vundle#begin()

Plugin 'VundleVim/Vundle.vim'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'altercation/vim-colors-solarized'
Plugin 'scrooloose/nerdtree'
Plugin 'jistr/vim-nerdtree-tabs'
Plugin 'scrooloose/syntastic'
Plugin 'xolox/vim-misc'
Plugin 'xolox/vim-easytags'
Plugin 'majutsushi/tagbar'
Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'vim-scripts/a.vim'
Plugin 'airblade/vim-gitgutter'
Plugin 'tpope/vim-fugitive'
Plugin 'Raimondi/delimitMate'
Plugin 'christoomey/vim-tmux-navigator'
Plugin 'jez/vim-c0'
Plugin 'jez/vim-ispc'
Plugin 'kchmck/vim-coffee-script'
Plugin 'flazz/vim-colorschemes'

call vundle#end()  
"-------------- PLUGINS END --------------------
filetype plugin indent on



"----- GENERAL SETTINGS-------
set laststatus=2
let g:airline_powerline_fonts = 1
let g:airline_detect_paste=1
let g:airline#extensions#tabline#enabled = 1
let g:airline_theme='solarized'
set background=dark
let g:solarized_termcolors=256
colorscheme solarized


"---------NERD-TREE SETTINGS----------
nmap <silent> <leader>t :NERDTreeTabsToggle<CR>
let g:nerdtree_tabs_open_on_console_startup = 1


"-------- SYNTASTIC SETTINGS---------
let g:syntastic_error_symbol = '✘'
let g:syntastic_warning_symbol = "▲"

augroup mySyntastic
    au!
    au FileType tex let b:syntastic_mode = "passive"
augroup END


"-------- TAGS SETTINGS --------------------------------
let g:easytags_events = ['BufReadPost', 'BufWritePost']
let g:easytags_async = 1
let g:easytags_dynamic_files = 2
let g:easytags_resolve_links = 1
let g:easytags_suppress_ctags_warning = 1
let g:tagbar_autoclose=2

nmap <silent> <leader>b :TagbarToggle<CR>
"autocmd BufEnter * nested :call tagbar#autoopen(0)

"---------GIT SETTINGS--------------
hi clear SignColumn
let g:airline#extensions#hunks#non_zero_only = 1


"----------DELIMITEMATE SETTINGS-----------------
let delimitMate_expand_cr = 1
augroup mydelimitMate
    au!
    au FileType markdown let b:delimitMate_nesting_quotes = ["`"]
    au FileType tex let b:delimitMate_quotes = ""
    au FileType tex let b:delimitMate_matchpairs = "(:),[:],{:},`:'"
    au FileType python let b:delimitMate_nesting_quotes = ['"', "'"]
augroup END

"-----------TMUX SETTINGS--------------
let g:tmux_navigator_save_on_switch = 2
```

```
sudo apt-get install exuberant-ctags

```

安裝 color solarized

```
cd ~/.vim/bundle
git clone git://github.com/altercation/vim-colors-solarized.git
```

vim +PluginInstall +qall

python

{% embed url="<https://github.com/fisadev/fisa-vim-config/blob/master/.vimrc>" %}

nodejs

{% embed url="<https://cnodejs.org/topic/5858faa418539d74537db610>" %}

{% embed url="<https://codertw.com/%E8%BB%9F%E9%AB%94%E9%96%8B%E7%99%BC%E5%B7%A5%E5%85%B7/23672/>" %}

{% embed url="<https://www.cnblogs.com/canmusic/archive/2013/04/08/3006564.html>" %}

{% file src="/files/-LvntbiCFIw6OpcMZULx" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kawsing.gitbook.io/opensystem/andoid-shou-ji/termux/ba-vim-bian-cheng-ide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
