視頻參考:玩轉Vim 從放棄到愛不釋手html
:set nu
設置行號java
:set nu!
取消行號python
:set hls
設置高亮linux
:set incsearch
設置增量搜索c++
:syntax on
打開代碼高亮git
:set autoindent
設置自動縮進,這裏有個大坑,網頁上拷貝的代碼粘到vim裏面整個縮進會亂掉github
:set paste
和 :set nopaste
能夠解決粘貼縮進亂掉的問題golang
:set clipboard=unnamed
容許你直接賦值粘貼系統剪貼板內容,而無需每次顯式」+
使用系統剪貼板。:echo has('clipboard')
輸出爲1時才支持此特性web
:set filetype
查看當前文件類型chrome
a
在當前字符後面插入
i
在當前字符前面插入
o
在當前位置下面一行插入
A
在當前行末尾插入
I
在當前行起始位置插入
O
在當前位置上面一行插入
x
normal 模式下快速刪除一個字符, mormal模式下u
undo,Ctrl+r
redo
xp
能夠對調兩個字符。其原理是藉助無名寄存器
daw
刪除一個單詞(會附帶刪除空格),等價於dw
diw
刪除一個單詞(不會刪除空格)
dt)
刪除當前位置直到)間的內容
dt"
刪除當前位置直到」間的內容
d$
刪除當前位置到行尾
d0
刪除當前位置到行首
2dd
刪除2行
4x
刪除4個字符
v
與x
或d
搭配使用,刪除選中部分
r
normal 模式下能夠替換一個字符。
R
normal模式下一直替換
s
normal 模式下刪除光標字符並進入插入模式
Ctrl+H
在一行上編輯的時候,刪除一個字符
Ctrl+W
在一行上編輯的時候,刪除一個單詞
Ctrl+U
在一行上編輯的時候,刪除一行
gi
快速回到最後一次編輯的地方並進行插入編輯
/
或者?
進行前向或者反向搜索
n
或 N
跳轉到下一個、上一個匹配
*
或 #
進行當前單詞的前下和向上匹配
使用f{char}
能夠移動到char字符上
t{char}
移動到char的前一個字符
分號;
或者逗號,
繼續搜該行下一個/上一個
:[range]s/{src}/{dst}/[flags]
range
取值
表示範圍好比:10,20
表示10-20行
%
表示所有
flags
取值
g
(global)表示全局範圍內執行c
(confirm)表示確認,能夠確認或者拒絕修改n
(number)報告匹配到的次數而不替換,能夠用來查詢匹配次數←↑↓→
hjkl
w/W
移到下一個word/WORD開頭。
e/E
下一個word/WORD尾
b/B
回到上一個word/WORD開頭,能夠理解爲backword
word 指的是以非空白符分割的單詞,WORD以空白符分割的單詞
0
移動到行首
$
移動到行尾
gg/G
移動到文件開頭和結尾
你可使用ctrl+o
快速返回
H/M/L
跳轉到屏幕的開頭(Head),中間(Middle)和結尾(Lower)
Ctrl+u ctrl+f
上下翻頁.(upword/forward)。
zz
把當前行置爲中間行
zt
把當前行置爲首行
zb
把當前行置爲尾行
:e file
能夠打開一個文件使用:ls會列舉當前緩衝區,而後使用:bn跳轉到第n個緩衝區
:bpre
:bnext
:bfirst
:blast
或者用:b buffer_name
加上tab補全來跳轉
一個緩衝區能夠分割成多個窗口,每一個窗口也能夠打開不一樣緩衝區
:sp [file]
水平分割
:vs [file]
垂直分割
每一個窗口能夠繼續被無限分割(看你屏幕是否夠大)
Ctrl+w+h
切換到左邊窗口
Ctrl+w+j
切換到下邊窗口
Ctrl+w+k
切換到上邊窗口
Ctrl+w+l
切換到右邊窗口
window的長寬有對應快捷鍵區設置,可是不必去記憶,後面會使用tmux
Vim的Tab和其餘編輯器不太同樣,能夠想象成Linux的虛擬桌面好比一個Tab全用來編輯 Python文件,一個Tab全是HTML文件相比窗口,Tab通常用的比較少,Tab太多管理起來也比較麻煩。這個功能有了後面tmux後也不須要記憶。
:tabe filename
在新標籤中打開filename
Ctrl+w+t
把當前窗口移到一個新標籤頁
:tabc
關閉當前標籤頁及其中的全部窗口
:tabo
只保留活動標籤頁,關閉全部其餘標籤頁
:tabn
N切換到編號爲N的標籤頁
:tabn
切換到下一個標籤頁
:tanp
切換到上一個標籤頁
viw
首先v進入選擇模式,iw選中當前單詞,忽略空格
vaw
首先v進入選擇模式,aw選中當前單詞
vis
或 va
首先v進入選擇模式,is 或 as選中當前一句話
vip
或 vap
首先v進入選擇模式,ip或ap選中一段
複製粘貼分別使用y
(yank)和p
(put)
剪貼d
和p
咱們可使用v(visual)命令選中所要複製的地方,而後使用p粘貼
配合文本對象:好比使用yiw
複製一個單詞,yy
複製一行
Vim不使用單一剪貼板進行剪貼、複製與粘貼,而是多組寄存器
"a
表示a寄存器,有名寄存器a-z
""
表示無名寄存器
"0
0是賦值專用寄存器,使用y複製文本同時準備拷貝到複製寄存器0
"+
+是系統剪貼板寄存器,能夠把vim裏面的內容複製到其餘地方。:echo has('clipboard')
輸出爲1時才支持此特性
".
上次插入的文本寄存器
"%
當前文件名寄存器
「ayiw
複製一個單詞到寄存器a中
「bdd
刪除當前行到寄存器b中
:reg a
查看a寄存器內容
」ap
把保存在a寄存器裏面的內容粘貼
使用ctrl+n
和ctrl+p
補全單詞
使用ctrl+x
和ctrl+f
補全文件名
使用ctrl+x
和ctrl+o
補全代碼,須要開啓文件類型檢查:filetype on
:wq
報錯退出
:e!
從新加載而且不保存當前文件
vim file1 file2 file3 -O
打開多個窗口,每一個窗口一個文件
vim file1 file2 file3 -p
打開多個tab,每一個tab一個文件
:colorscheme
查看當前主題
:colorscheme 空格 Ctrl+D
顯式當前可用主題
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
:PlugInstall 安裝插件 :PlugClean 清理插件 :PlugUpgrade 升級插件管理器 :PlugUpdate 升級插件 :PlugStatus 查看插件狀態
實現文件目錄樹功能,以下圖
Plug 'scrooloose/nerdtree'
" NERFTree 配置 " NERFTree激活快捷鍵 let mapleader=',' nnoremap <leader>v :NERDTreeFind<cr> nnoremap <leader>g :NERDTreeToggle<cr> " 顯式隱藏文件 let NERDTreeShowHidden=1 " 忽略指定類型文件 let NERDTreeIgnore = [ \ '\.git$', '\.hg$', '\.svn$', '\.stversion$s', '\.pyc$', '\.pyo$', '\.swp$', \ '\.DS_Store$', '\.sass-cache$', '__pycache__$', '\.egg-info$', '\.ropeproject$', \]
快速查找並打開一個文件。ctrlp有個缺陷:不會隨着打開文件的不一樣自動改變工做目錄(ctrlp的工做目錄始終是初始打開文件所在工做目錄)。這就致使ctrlp不少文件找不到。因此更推薦使用fzf.vim替代ctrlp
Plug 'kien/ctrlp.vim'
" ctrlp 配置 " 激活ctrlp快捷鍵 let g:ctrlp_map = '<c-p>' "工做目錄隨文件變。在ctrlp中打開一個文件後,以當前文件我在位置爲工做目錄,在這下邊模糊搜索文件 autocmd BufEnter * cd %:p:h
在整個文件區域內快速移動到任意位置
Plug 'easymotion/vim-easymotion'
ss
調用easymotion
" vim-easymotion config nmap ss <Plug>(easymotion-s2)
normal 模式下增長,刪除,修改爲對內容
ds(delete a surrounding) 舉例ds '
刪除單引號
cs(change a surrounding) 舉例 cs " '
把"替換爲'
ys(you add a surrounding) 舉例 ysiw"
給單詞加上"
Plug 'tpope/vim-surround'
給光標下的代碼加下劃線
Plug 'itchyny/vim-cursorword'
咱們常常須要在一個代碼項目中模糊搜索一些文本,怎麼辦呢?
Vim自帶的搜索/能夠搜索當前文件,可是項目有不少個文件
須要一個插件來模糊搜索多個文件內容
使用Ag.vim或者fzf.vim均可以很好地支持模糊搜索
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } Plug 'junegunn/fzf.vim'
使用:Ag[PATTERN]
模糊搜索字符串
注意:
若是提示"ag is not found"須要apt-get install silversearcher-ag
使用:Files[PATH]
模糊搜索目錄下文件
Ctrl+j/k
備選項中下移上移
ctrl + r
搜索輸入命令歷史
ctrl + t
等同於直接執行命令fzf(fzf -e e是精確匹配)
vim $(fzf)
能夠經過輸入**
來觸發 fzf 對文件/目錄的模糊補全(查找),以下例子所示:
# Files under current directory # - You can select multiple items with TAB key vim **<TAB> # Files under parent directory vim ../**<TAB> # Files under parent directory that match `fzf` vim ../fzf**<TAB> # Files under your home directory vim ~/**<TAB> # Directories under current directory (single-selection) cd **<TAB> # Directories under ~/github that match `fzf` cd ~/github/fzf**<TAB>
cd $(find * -type d | fzf)
這是個組合 (cd+find+fzf) 命令,完成切換到任意子目錄的功能。能夠看出來當 fzf 和其它命令組合使用時就能使得一些操做更方便:
fzf 默認使用 **
來補全 shell 命令,比起默認的 tab 補全,fzf 補全不知道高到哪裏去了。cd, vim, kill, ssh, export... 通通都能補全,好用哭了 🤣
在使用kill
命令時,fzf 會自動觸發其自動補全功能:
# Can select multiple processes with <TAB> or <Shift-TAB> keys kill -9 <TAB>
主機名補全:以下例子所示:
ssh **<TAB> telnet **<TAB>
export FZF_DEFAULT_COMMAND='if [ -f cscope.files ]; then cat cscope.files; else find ./ -type f ; fi' export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --preview '(highlight -O ansi {} || cat {}) 2> /dev/null | head -500'"
注意:默認狀況下預覽界面不會語法高亮,如須要語法高亮須要安裝apt-get install highlight
因爲在多個文件裏面批量搜索和替換
Plug 'brooth/far.vim'
#替換上層目錄、當前目錄下全部.py文件 :Far src dst **/*.py #通過預覽,感受替換沒問題後確認替換 :Fardo
顯式語言的標籤
apt install exuberant-ctags
tags使用
:ts
or :tselect
shows the list:tn
or :tnext
goes to the next tag in that list:tp
or :tprev
goes to the previous tag in that list:tf
or :tfirst
goes to the first tag of the list:tl
or :tlast
goes to the last tag of the list:tags
show the tags you’ve traversed since you opened vim, run參考文章
Plug 'majutsushi/tagbar'
" tagbar config nnoremap <leader>t :TagbarToggle<CR>
給關鍵字高亮
Plug 'lfv89/vim-interestingwords'
" vim-interestingwords 配置 nnoremap <silent> <leader>k :call InterestingWords('n')<cr> nnoremap <silent> <leader>K :call UncolorAllWords()<cr> nnoremap <silent> n :call WordNavigation('forward')<cr> nnoremap <silent> N :call WordNavigation('backward')<cr> let g:interestingWordsGUIColors = ['#8CCBEA', '#A4E57E', '#FFDB72', '#FF7272', '#FFB3FF', '#9999FF'] let g:interestingWordsTermColors = ['154', '121', '211', '137', '214', '222'] let g:interestingWordsRandomiseColors = 1
最後加上一句話
export TERM=xterm-256color
這句話很關鍵,沒有的話,vim-interestingwords進行高亮關鍵字的時候只顯示一種顏色。同時這個還會影響vim-airline插件底部狀態欄的顯式。
通用代碼補全。向vim-go、python-mode等插件也能夠補全代碼,可是他們都只針對特定語言。deoplete.vim是通用異步代碼補全插件,支持多種語言(須要安裝對應語言的擴展),支持neovim和vim8。除此以外YCM插件也有不少人使用,這兩個的差異暫時不清楚。
Ctrl+n/p
上下移動備選項
if has('nvim') Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } else Plug 'Shougo/deoplete.nvim' Plug 'roxma/nvim-yarp' Plug 'roxma/vim-hug-neovim-rpc' endif
以Ubuntu18.04爲例
apt-get install -y python-pip python3-pip # 安裝VIM,應該安裝完就是Vim8 # apt-get install vim # 安裝Python3 # apt-get install python3 # 安裝vim的Python-client庫pynvim pip2 install --user pynvim pip3 install --user pynvim # 安裝插件 python的neovim庫 pip2 install --user neovim pip3 install --user neovim
set completeopt-=preview set encoding=utf-8 set pyxversion=3 let g:python3_host_prog="/usr/bin/python3" let g:deoplete#enable_at_startup = 1
deoplete安裝完畢後默認只能根據當前問的已有內容推測,要想支持相應語言的只能提示,須要單獨安裝源
參考官方推薦的各語言的補全源:Completion Sources
以安裝C/C++語言源爲例
vim-plug配置
Plug 'Shougo/deoplete-clangx'
格式化C, C++, Obj-C等代碼
:ClangFormat
格式化代碼
vim-plug方式安裝
Plug 'rhysd/vim-clang-format'
以Ubuntu18.04爲例
apt-get install clang-format
" vim-clang-format config " 退出insert模式時自動格式化 let g:clang_format#auto_format_on_insert_leave=1 " 採用google代碼風格 let g:clang_format#code_style="google" " 啓用自動格式化 autocmd FileType c ClangFormatAutoEnable
多種語言的靜態檢查
Plug 'dense-analysis/ale'
" ale 配置 let g:ale_set_highlights = 0 "自定義error和warning圖標 let g:ale_sign_error = '✗' let g:ale_sign_warning = '⚡ ' "在vim自帶的狀態欄中整合ale let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK'] "顯示Linter名稱,出錯或警告等相關信息 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' "打開文件時不進行檢查 let g:ale_lint_on_enter = 0 "普通模式下,sp前往上一個錯誤或警告,sn前往下一個錯誤或警告 nmap sp <Plug>(ale_previous_wrap) nmap sn <Plug>(ale_next_wrap) "<Leader>s觸發/關閉語法檢查 nmap <Leader>s :ALEToggle<CR> "<Leader>d查看錯誤或警告的詳細信息 nmap <Leader>d :ALEDetail<CR> "使用clang對c和c++進行語法檢查,對python使用pylint進行語法檢查 let g:ale_linters = { \ 'c++': ['clang'], \ 'c': ['clang'], \ 'python': ['pylint'], \}
vim 註釋插件有不少,vim-commentary是個比較輕量的註釋插件。會根據不一樣的文件類型使用不一樣註釋,python(#)golang(//)。
gcc
單行註釋
gc
v選中代碼後註釋
gcgc
取消註釋
Plug 'tpope/vim-commentary'
vim自身也支持書籤,可是使用起來不是很友好。視頻
vim-plug配置
Plug 'MattesGroeger/vim-bookmarks'
mm
打/取消書籤
ma
顯式全部書籤
mc
清除當前buffer上的書籤
mx
清除全部書籤
" 經常使用設置 " 設置行號 set number " 設置默認主題 " colorscheme hybrid " 高亮搜索 set hlsearch " 增量搜索 set incsearch " 按F2進入粘貼模式 set pastetoggle=<F2> " 高亮搜索 set hlsearch " 設置摺疊方式 set foldmethod=indent " 支持鼠標操做,可是xhell下與右鍵粘貼衝突 " set mouse=a " 打開語法高亮 syntax on " 光標所在的當前行高亮,與vim-cursorword插件衝突 " set cursorline " 修改leader鍵爲, let mapleader=',' let g:mapleader=',' " 使用jj進入normal模式 inoremap jj <Esc>`^ " 使用leader+w直接保存 inoremap <leader>w <Esc>:w<cr> noremap <leader>w :w<cr> " 使用ctrl+h/j/k/l切換窗口 noremap <C-h> <C-w>h noremap <C-j> <C-w>j noremap <C-k> <C-w>k noremap <C-l> <C-w>l " vim-plug安裝插件 call plug#begin('~/.vim/plugged') Plug 'mhinz/vim-startify' Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' Plug 'yggdroot/indentline' Plug 'w0ng/vim-hybrid' Plug 'scrooloose/nerdtree' Plug 'kien/ctrlp.vim' Plug 'easymotion/vim-easymotion' Plug 'tpope/vim-surround' Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } Plug 'junegunn/fzf.vim' Plug 'brooth/far.vim' Plug 'majutsushi/tagbar' Plug 'lfv89/vim-interestingwords' if has('nvim') Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } else Plug 'Shougo/deoplete.nvim' Plug 'roxma/nvim-yarp' Plug 'roxma/vim-hug-neovim-rpc' endif Plug 'Shougo/deoplete-clangx' Plug 'rhysd/vim-clang-format' Plug 'dense-analysis/ale' Plug 'tpope/vim-commentary' Plug 'MattesGroeger/vim-bookmarks' Plug 'itchyny/vim-cursorword' call plug#end() " ************NERFTree 配置************ nnoremap <leader>v :NERDTreeFind<cr> nnoremap <leader>g :NERDTreeToggle<cr> let NERDTreeShowHidden=1 let NERDTreeIgnore = [ \ '\.git$', '\.hg$', '\.svn$', '\.stversion$s', '\.pyc$', '\.pyo$', '\.swp$', \ '\.DS_Store$', '\.sass-cache$', '__pycache__$', '\.egg-info$', '\.ropeproject$', \] " ************ctrlp 配置************ let g:ctrlp_map = '<c-p>' "工做目錄隨文件變。在ctrlp中打開一個文件後,以當前文件我在位置爲工做目錄,在這下邊模糊搜索文件 autocmd BufEnter * cd %:p:h " ************vim-easymotion 配置************ nmap ss <Plug>(easymotion-s2) " ************tagbar 配置************ nnoremap <leader>t :TagbarToggle<CR> " ************ctags 配置************ " 第一個命令裏的分號是必不可少的,這個命令讓vim首先在當前目錄裏尋找tags文件,若是沒有找到tags文件,就到父目錄中查找,一直向 上遞歸。由於tags文件中記錄的路徑老是相對於tags文件所在的路徑,因此要使用第二個設置項來改變vim的當前目錄。 set tags=tags; set autochdir " ************cscope設置************ " 使用quickfix窗口來顯示cscope的結果。這樣,經過快捷鍵查找某個符號後,會當即跳轉到第一個找到的該符號出現的位置。若是你對這>次默認跳轉的位置不滿意,在Vim命令行下運行cw命令,就能在編輯區下面quickfix窗口看到全部查找結果的列表,點擊相應列表項就能跳轉 到相應位置。 set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用Ctrl-j / Ctrl-k 跳轉到後一項和前一項紀錄 nmap <C-j> :cnext<CR> nmap <C-k> :cprev<CR> " 指定了執行cscpoe的命令 set csprg=/usr/bin/cscope " 設置’cst’,你將始終同時查找cscope數據庫和tags文件 set cst " csto=0優先查找cscope數據庫,反之優先查找tags數據庫 set csto=0 " 增長一個cscope數據庫時顯示錶示表示執行成功或失敗的信息 set csverb " 顯示文件路徑的最後3個部分,包含這個文件名自己 set cspc=3 " ************vim-interestingwords 配置************ nnoremap <silent> <leader>k :call InterestingWords('n')<cr> nnoremap <silent> <leader>K :call UncolorAllWords()<cr> nnoremap <silent> n :call WordNavigation('forward')<cr> nnoremap <silent> N :call WordNavigation('backward')<cr> let g:interestingWordsGUIColors = ['#8CCBEA', '#A4E57E', '#FFDB72', '#FF7272', '#FFB3FF', '#9999FF'] let g:interestingWordsTermColors = ['154', '121', '211', '137', '214', '222'] let g:interestingWordsRandomiseColors = 1 " ************deoplete.vim 配置************ set completeopt-=preview set encoding=utf-8 set pyxversion=3 let g:python3_host_prog="/usr/bin/python3" let g:deoplete#enable_at_startup = 1 " ************vim-clang-format 配置************ " 退出insert模式時自動格式化 let g:clang_format#auto_format_on_insert_leave=1 " 採用google代碼風格 let g:clang_format#code_style="google" " 啓用自動格式化 autocmd FileType c ClangFormatAutoEnable " ************ale 配置************ let g:ale_set_highlights = 0 "自定義error和warning圖標 let g:ale_sign_error = '✗' let g:ale_sign_warning = '⚡ ' "在vim自帶的狀態欄中整合ale let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK'] "顯示Linter名稱,出錯或警告等相關信息 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' "打開文件時不進行檢查cd let g:ale_lint_on_enter = 0 "普通模式下,sp前往上一個錯誤或警告,sn前往下一個錯誤或警告 nmap sp <Plug>(ale_previous_wrap) nmap sn <Plug>(ale_next_wrap) "<Leader>s觸發/關閉語法檢查 nmap <Leader>s :ALEToggle<CR> "<Leader>d查看錯誤或警告的詳細信息 nmap <Leader>d :ALEDetail<CR> "使用clang對c和c++進行語法檢查,對python使用pylint進行語法檢查 let g:ale_linters = { \ 'c++': ['clang'], \ 'c': ['clang'], \ 'python': ['pylint'], \}
Shift+F
顯式連接
Shift+H/L
前進後退
Shift+J/K
左右移動tab
t
新開一個tab,這個應該是chrome內置的。Ctrl+t
在tab間移動
Shift+t
在全部打開的tab中搜索
o
:至關於Chrome中的地址欄,能夠匹配歷史記錄、收藏夾並在當前窗口打開,或者直接打開一個網址或者搜索一個關鍵字(Chrome在全屏的時候地址欄死都出不來,有了它就解決這個一直困擾個人問題了!~),若是按的是O
,則能夠在新窗口中打開,很是很是方便!tab
向下移動,Shift+tab
向上移動
j
:向下細微滾動窗口 k
:向上細微滾動窗口
d
:向下滾動半個屏幕 u
:向上移動半個屏幕
g+i
:將光標 定位到輸入框,若是有多個能夠按Tab鍵切換
g+s
:查看網頁的源代碼
x
:關閉當前頁面 X
:恢復剛剛關閉的頁面
g+g
(連續按兩下g):回到頂部
G
:到達頁面底部
Linux下如何瀏覽代碼,StackOverflow上一個很好的回答
Cscope是相似於ctags同樣的工具,但能夠認爲她是ctags的加強版。
ctags侷限性
首次使用Cscope時,他會根據源文件生成符號數據庫。而後在之後的使用中,cscope只是在源文件有改動或源文件列表不一樣時纔會重建數據庫。當在重建數據庫時,未改動過的文件對應的數據庫信息會從舊的數據庫中拷貝過來,因此會使重建數據庫快於一開始的新建數據庫。
當你在命令行下調用cscope時,你會得到一個全屏選擇窗口,可以使你查詢特定的內容。然而,一旦你查詢的有匹配,那麼就會用你默認的編輯器來編輯該源文件,可是你不可以簡單的使用Ctrl+]或者:tag命令來從一個標籤跳轉到另外一個標籤。(由於這是ctags的用法)
全部的cscope命令都是經過向主cscope命令」:cscope」傳遞參數選項。她最短的縮寫是」:cs」。」:scscope」命令也作一樣的事情而且同時會橫向分隔窗口(簡稱:」scs」)。
增長一個新的cscope數據庫/連接庫
使用方法:
:cs add {file|dir} [pre-path] [flags]
其中
[pre-path] 就是以-p選項傳遞給cscope的文件路徑,是以相對路徑表示的文件前加上的path,這樣你不要切換到你數據庫文件所在的目錄也可使用它了。
[flags] 你想傳遞給cscope的額外旗標
實例:
:cscope add /root/code/vimtest/ftpd
:cscope add /project/vim/cscope.out /usr/local/vim
:cscope add cscope.out /usr/local/vim –C
查詢cscope
使用方法:
:cs find {querytype} {name}
其中:
{querytype} 即相對應於實際的cscope行接口數字,同時也相對應於nvi命令:
實例:
#號後爲註釋
:cscope find c ftpd_send_resp # 查找全部調用這個函數的函數(們)
:cscope find 3 ftpd_send_resp # 和上面結果同樣
顯示一個簡短的摘要。
使用方法:
:cs help
殺掉一個cscope連接(或者殺掉全部的cscope連接)
使用方法:
:cs kill {num|partial_name}
爲了殺掉一個cscope連接,那麼連接數字或者一個部分名稱必須被指定。部分名稱能夠簡單的是cscope數據庫文件路徑的一部分。要特別當心使用部分路徑殺死一個cscope連接。
從新初始化全部的cscope連接。
使用方法:
:cs reset
顯示cscope的連接
使用方法:
:cs show
vim編輯項目中的任意一個源文件, :cs show 可能會顯示 「no cscope connection"這是由於vim沒有幫你自動加載數據庫文件, 用:cs add cscope.out就能夠了。這個時候命令:cs find s tagname就能夠用了, 但用ctrl + ]的時候不會自動跳轉, 這仍是由於vim沒有把你的cscope數據庫文件當成tag文件, 須要用: set cst 或者:set cscopetag, 這樣就會把cscope的數據庫當成tag文件了
進入vim後,添加cscope數據庫
:cs add /kernelsty/linux-2.6.24/
舉例
:cs add /kernelsty/linux-2.6.24/cscope.out /kernelsty/linux-2.6.24/
cscope查找的結果有多個時,只顯示第一個(在vimrc中設置)。使用cw
啓用quickfix。quickfix中條目移動使用Ctrl+j/k
上下移動
生成cscope.out和tags的腳本
#!/bin/sh find . -name "*.h" -o -name "*.c" -o -name "*.cpp" -o -name "*.java" >cscope.files cscope -bkq -i cscope.files ctags -R
取消.bashrc文件中force_color_prompt=yes
的註釋便可:(這和xshell配置無關)
Tmux 是一個終端複用工具,用於在一個終端窗口中運行多個終端會話,好比咱們能夠實現很是炫酷的效果。
若是想要系統學習tmux,能夠參考
Ubuntu安裝apt-get install tmux
tmux 默認的快捷鍵前綴是 ctrl+b ,固然你也能夠修改它,不過這裏爲了簡化,我都使用默認按鍵。
tmux 中有幾個重要概念:
會話(session): 創建一個 tmux 工做區會話,會話能夠長期駐留,從新鏈接服務器不會丟失,咱們只需從新 tmux attach 到以前的工做區就能夠恢復會話
窗口(window): 容納多個窗格
窗格(pane): 能夠在窗口中分紅多個窗格
Tmux -V
查看tmux版本
tnew s_name
建立tmux session(注意:我在.bashrc裏面alias tnew='tmux new -s'
)
tnew s_name -d
建立一個tmux session,並放到後臺
tnew s_name -n w_name
建立一個session,並指定session中第一個windows的名字
Ctrl+b+s
在session中切換
tmux kill-session -t s_name
在terminal時,kill掉session
若是當前session只有一個window,exit
或 Ctrl+b+&
也是能夠關閉session的。
只有關閉session內部全部window的狀況下,才能夠關閉session
Ctrl+b+d
從tmux session中detach進入terminal
tmux attach -t s_name
進入指定tmux session
Ctrl+b+c
在session中打開一個window。新打開的window名字取執行的命令。若是沒有執行任何命令,就是bash。若是運行htop,window的名字就是top。這也就意味着若是你不在建立window時候指定名字,或者更改window名字,他的名字時隨執行命令動態變化的。
Ctrl+b+,
底部status bar會提示更改window名字
Ctrl+b+w
文件UI界面中選擇你要的window
Ctrl+b:
進入commad line模式,new-window -n w_name
建立一個命名window。舉例new-window -n processes "top"
command line模式下,建立一個名爲processes的window,而且運行top命令。這種建立window的同時指定命令的作法更像是一種臨時window,一旦你退出命令,window也被銷燬了。
exit
不提示直接關閉window
Ctrl+b+&
帶提示關閉window
Ctrl+b+%
垂直分割
Ctrl+b+"
水平分割
Ctrl+b+o
遍歷pane
Ctrl+b+←↑↓→
移動pane。後面經過修改.tmux.conf能夠映射爲hjkl
Ctrl+b+space
切換不一樣pane佈局
exit
不提示直接關閉pane
Ctrl+b+x
帶提示關閉pane。若是window只有一個pane,也會關閉window
tmux會查找兩處配置文件:
系統級/etc/tmux.conf
用戶級~/.tmux.conf
使用現成的.tmux.conf文件,github
該版本有以下特色
Ctrl+b+hjkl
代替Ctrl+b+←↓↑→
Ctrl+b+HJKL
調整pane尺寸
Ctrl+b Ctrl+h/l
在一個session中切換上一個/下一個window. 我更喜歡使用Ctrl+b+w
監視文件改動
Python 2.6+ watchdog
when-changed [OPTION] FILE COMMAND... when-changed [OPTION] FILE [FILE ...] -c COMMAND FILE can be a directory. Use %f to pass the filename to the command. Options: -r Watch recursively -v Verbose output. Multiple -v options increase the verbosity. The maximum is 3: -vvv. -1 Don't re-run command if files changed while command was running -s Run command immediately at start -q Run command quietly
Ubuntu 18.04
sudo apt install openssh-server
修改/etc/ssh/sshd_config
vim tree psmisc pstree htop net-tools curl git make python-pip python3-pip python3 clang-format silversearcher-ag highlight
pip2 install --user pynvim
pip3 install --user pynvim
pip2 install --user neovim
pip3 install --user neovim
sudo passwd
# https://opsx.alibaba.com/mirror deb https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
apt update
只檢查,不更新(已安裝的軟件包是否有可用的更新,給出彙總報告)
apt upgrade
更新已安裝的軟件包
見上邊vim插件
我在vimrc裏面設置代碼摺疊方式爲indent
在摺疊處使用命令
za
,打開或關閉當前摺疊;zM
,關閉全部摺疊;zR
,打開全部摺疊
vim下查找代碼定義時ctags: tag not found
Yes, you should tell Vim where to find your tags
file with something like:
:set tags=/path/to/tags
This is not very optimal, though. This line in your ~/.vimrc
should help:
set tags=./tags,tags;$HOME
It tells Vim to look for a tags
file in the directory of the current file, in the current directory and up and up until your $HOME
(that's the meaning of the semicolon), stopping on the first hit.