Vim外掛之ack.vim
純粹個人記錄備份而已,如有錯誤,歡迎指正,更新於2018/5/13
已經改用ripgrep配合ack
進行搜尋,ripgrep是用Rust
寫的新一代搜尋引擎,號稱是現在最快的搜尋引擎,在ack中呼叫ripgrp進行搜尋的方法如下
"呼叫rg進行搜尋
if executable('rg')
let g:ackprg = 'rg --vimgrep'
endif
在debian
安裝ripgrep的方法如下
$ curl -LO https://github.com/BurntSushi/ripgrep/releases/download/0.8.1/ripgrep_0.8.1_amd64.deb
$ sudo dpkg -i ripgrep_0.8.1_amd64.deb
在Windows下不需要安裝,只需要在ripgrep專案的release頁面下載windows-msvc版本的壓縮包,解壓後將其放到Vim的安裝目錄下即可,比如C:\Program Files (x86)\Vim\vim80
目錄,其他配置與之前相同不需要更改
以下為原文
與ctrlp一樣,ack.vim也是Vim上的一個搜尋工具,主要用於專案內搜尋,比如搜尋某個函式之類的非常方便,github上也有一個基於ack的程式碼搜尋專案vim-codequery,但依賴較多。在ack之上,還有一個基於The Silver Searcher
The Silver Searcher
的還有vim-ags),而且ack也允許呼叫ag進行搜尋,因此更推薦用ack,要使用ag必須先在系統中安裝The Silver Searcher
,在Debian上只需執行
$ sudo aptitude install ack silversearcher-ag
下面是我的配置
"ack
"<Leader>c進行搜尋,同時不自動開啟第一個匹配的檔案"
map <Leader>c :Ack!<Space>
" 呼叫ag進行搜尋
if executable('ag')
let g:ackprg = 'ag --vimgrep'
endif
"高亮搜尋關鍵詞
let g:ackhighlight = 1
"修改快速預覽視窗高度為15
let g:ack_qhandler = "botright copen 15"
"在QuickFix視窗使用快捷鍵以後,自動關閉QuickFix視窗
let g:ack_autoclose = 1
"使用ack的空白搜尋,即不新增任何引數時對游標下的單詞進行搜尋,預設值為1,表示開啟,置0以後使用空白搜尋將返回錯誤資訊
let g:ack_use_cword_for_empty_search = 1
"部分功能受限,但對於大專案搜尋速度較慢時可以嘗試開啟
"let g:ack_use_dispatch = 1
在上面的配置中,如果你想自動開啟第一個匹配的檔案可以修改為
map <Leader>c :Ack<Space>
如果你想要配置ack搜尋引數的話,可以使用g:ack_default_options
進行定製,預設引數是 ” -s -H –nocolor –nogroup –column”,因此你要讓搜尋結果區分大小寫的話,可以設定成下面這樣
let g:ack_default_options = " -s -H --nocolor --nogroup --column --smart-case"
但是由於上面是呼叫ag進行搜尋,g:ack_default_options
失效,要定製搜尋引數必須寫到g:ackprg
中,同樣以新增--smart-case
為例
let g:ack_prg = "ag --vimgrep --smart-case"
下面是QuickFix視窗下的一些快捷鍵
按鍵 | 功能 |
---|---|
? | 顯示鍵盤對映 |
o | 開啟檔案 |
O | 開啟檔案關閉QuickFix視窗 |
go | 預覽檔案,但焦點留在ack搜尋結果上 |
t | 在新標籤頁開啟檔案 |
T | 在新標籤頁開啟但不切換到那個標籤頁 |
h | 分屏開啟 |
H | 分屏開啟,但焦點停留在ack搜尋結果上 |
v | 豎直分屏開啟 |
gv | 豎直分屏開啟,但焦點停留在ack搜尋結果上 |
q | 關閉QuickFix視窗 |
另外ack也支援檔案搜尋,使用:AckFile
即可,不過我一般是用ctrlp搭配ag搜尋檔案的,具體實現看Vim外掛之ctrlp
如果需要在Windows下使用ack.vim,同樣需要有ack或者ag的支援,在Windows下安裝它們可以使用Chocolatey,安裝方法如下:首先以管理員許可權開啟cmd視窗,然後執行下列命令
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
安裝完成以後,就可以繼續安裝ack或者ag了,在cmd視窗中執行下列命令(建議先關閉原先的cmd視窗,再重新開啟一個cmd視窗進行安裝)
choco install ack
安裝ack的過程中需要下載Strawberry,過程會慢一點,請耐心等待,ag的安裝方法類似。另外需要注意的一點是,對於Win7由於預設的PowerShell版本是2.0,而Chocolatey需要3.0以上的版本,因此對於Win7還需要先更新PowerShell,具體方法可以參考如何升級PowerShell