1. 程式人生 > >Vim外掛之ack.vim

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

的fork版本ag.vim,速度比ack更快,但功能不如ack豐富,16年的時候已經deprecated了(同樣基於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