摘要:比如下表是它可用的所有選項是一個函數,用來創建自己的自動補全功能。如果第一個參數是一個命令字符或一個那么它會被用作對于高級用戶,可以傳入一個字典選項。希望大家可以結合創造出更多的使用方法。
FZF and VIM 前言
fzf本身并不是一個vim 插件,本來作者只提供了基本的wrapper函數(比如fzf#run). 但后來作者發現很多人并不熟悉VIMScript, 所以就創建一個默認的vim plugin.
為什么在VIM里用fzf?fzf可以異步地運行,不影響vim操作,比同類的其他插件都快得多。
如何安裝有兩種安裝方式vundle或vim-plug
vundleset rtp+=/home/harriszh/.fzf/ ... Plugin "junegunn/fzf.vim"vim-plug
Plug "/usr/local/opt/fzf" Plug "junegunn/fzf.vim"
如果你希望通過vim-plug來安裝fzf, 那么使用下面設置
Plug "junegunn/fzf", { "dir": "~/.fzf", "do": "./install --all" } Plug "junegunn/fzf.vim"vim下支持的命令
這些命令都是FZF調用某個工具產生文件,文件內容, tag, comment, command,然后FZF用一個小窗口把它們顯示出來,用戶就可以用模糊搜索的方式來選擇一個或多個選項,按下enter鍵后就可以用VIM打開它們或跳轉到相應的行。
如Files針對的就是文件, GFiles針對的就是git文件
Command | List |
---|---|
Files [PATH] | 普通文件查找 (similar to :FZF) |
GFiles [OPTS] | git文件查找 (git ls-files) |
GFiles? | git文件查找 (git status) |
Buffers | buffer文件切換 |
Colors | Color schemes |
Ag [PATTERN] | ag search result (ALT-A to select all, ALT-D to deselect all) |
Lines [QUERY] | 加載的所有buffer里查找 |
BLines [QUERY] | 在當前buffer里查找包含某關鍵詞的行 |
Tags [QUERY] | 以Tag查找 (ctags -R) |
BTags [QUERY] | Tags in the current buffer |
Marks | Marks |
Windows | Windows |
Locate PATTERN | locate command output |
History | v:oldfiles and open buffers |
History: | 命令歷史查找 |
History/ | Search history |
Snippets | Snippets (UltiSnips) |
Commits | Git commits (requires fugitive.vim) |
BCommits | Git commits for the current buffer |
Commands | Commands |
Maps | Normal mode mappings |
Helptags | Help tags 1 |
Filetypes | File types |
Files與FZF一樣的作用,它會列出所有文件,選中后vim會打開選中的文件
Buffers用于在存在于buffer中的文件間切換
Lines
BLines
因為ripgrep是目前性能最好的文本內容搜索工具,所以我們可以自己定義一個命令
command! -bang -nargs=* Rg call fzf#vim#grep( "rg --column --line-number --no-heading --color=always --smart-case ".shellescape(), 1, 0 ? fzf#vim#with_preview("up:60%") : fzf#vim#with_preview("right:50%:hidden", "?"), 0)
這樣輸入:Rg
上面的命令都可以通過ctrl-t, ctrl-x, ctrl-v來在new tab, new split, new vsplit窗口打開
" This is the default extra key bindings let g:fzf_action = { "ctrl-t": "tab split", "ctrl-x": "split", "ctrl-v": "vsplit" } " Default fzf layout " - down / up / left / right let g:fzf_layout = { "down": "~40%" } " In Neovim, you can set up fzf window using a Vim command let g:fzf_layout = { "window": "enew" } let g:fzf_layout = { "window": "-tabnew" } let g:fzf_layout = { "window": "10split enew" } " Customize fzf colors to match your color scheme let g:fzf_colors = { "fg": ["fg", "Normal"], "bg": ["bg", "Normal"], "hl": ["fg", "Comment"], "fg+": ["fg", "CursorLine", "CursorColumn", "Normal"], "bg+": ["bg", "CursorLine", "CursorColumn"], "hl+": ["fg", "Statement"], "info": ["fg", "PreProc"], "border": ["fg", "Ignore"], "prompt": ["fg", "Conditional"], "pointer": ["fg", "Exception"], "marker": ["fg", "Keyword"], "spinner": ["fg", "Label"], "header": ["fg", "Comment"] } " Enable per-command history. " CTRL-N and CTRL-P will be automatically bound to next-history and " previous-history instead of down and up. If you don"t like the change, " explicitly bind the keys to down and up in your $FZF_DEFAULT_OPTS. let g:fzf_history_dir = "~/.local/share/fzf-history"本地設定
" [Buffers] 如果可能跳到已存在窗口 let g:fzf_buffers_jump = 1 " [[B]Commits] 自定義被"git log"使用的選項 let g:fzf_commits_log_options = "--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"" " [Tags] 定義用來產生tag的命令 let g:fzf_tags_command = "ctags -R" " [Commands] --expect expression for directly executing the command let g:fzf_commands_expect = "alt-enter,ctrl-x"高級定制
也可以使用autoload函數來定義自己的命令
" Command for git grep " - fzf#vim#grep(command, with_column, [options], [fullscreen]) command! -bang -nargs=* GGrep call fzf#vim#grep( "git grep --line-number ".shellescape(映射), 0, { "dir": systemlist("git rev-parse --show-toplevel")[0] }, 0) " Override Colors command. You can safely do this in your .vimrc as fzf.vim " will not override existing commands. command! -bang Colors call fzf#vim#colors({"left": "15%", "options": "--reverse --margin 30%,0"}, 0) " Augmenting Ag command using fzf#vim#with_preview function " * fzf#vim#with_preview([[options], preview window, [toggle keys...]]) " * For syntax-highlighting, Ruby and any of the following tools are required: " - Highlight: http://www.andre-simon.de/doku/highlight/en/highlight.php " - CodeRay: http://coderay.rubychan.de/ " - Rouge: https://github.com/jneen/rouge " " :Ag - Start fzf with hidden preview window that can be enabled with "?" key " :Ag! - Start fzf in fullscreen and display the preview window above command! -bang -nargs=* Ag call fzf#vim#ag( , 0 ? fzf#vim#with_preview("up:60%") : fzf#vim#with_preview("right:50%:hidden", "?"), 0) " Similarly, we can apply it to fzf#vim#grep. To use ripgrep instead of ag: command! -bang -nargs=* Rg call fzf#vim#grep( "rg --column --line-number --no-heading --color=always --smart-case ".shellescape( ), 1, 0 ? fzf#vim#with_preview("up:60%") : fzf#vim#with_preview("right:50%:hidden", "?"), 0) " Likewise, Files command with preview window command! -bang -nargs=? -complete=dir Files call fzf#vim#files( , fzf#vim#with_preview(), 0)
Mapping | Description |
---|---|
Normal mode mappings | |
Insert mode mappings | |
Visual mode mappings | |
Operator-pending mappings | |
cat /usr/share/dict/words | |
Path completion using find (file + dir) | |
File completion using find | |
File completion using ag | |
Line completion (all open buffers) | |
Line completion (current buffer only) |
" Mapping selecting mappings nmap創建自己的插件(fzf-maps-n) xmap (fzf-maps-x) omap (fzf-maps-o) " Insert mode completion imap (fzf-complete-word) imap (fzf-complete-path) imap (fzf-complete-file-ag) imap (fzf-complete-line) " Advanced customization using autoload functions inoremap fzf#vim#complete#word({"left": "15%"})
fzf#run()是vim集成的核心函數,它接受一個字典變量作為輸入, 你至少要通過sink選項來告訴fzf如何處理選中的條目。
比如:
call fzf#run({"sink": "tabedit", "options": "--multi --reverse"}) call fzf#run({"source": "git ls-files", "sink": "e", "right": "40%"}) call fzf#run({"source": map(split(globpath(&rtp, "colors/*.vim")), "fnamemodify(v:val, ":t:r")"), "sink": "colo", "left": "25%"})
下表是它可用的所有選項
Option name | Type | Description |
---|---|---|
source | string | External command to generate input to fzf (e.g. find .) |
source | list | Vim list as input to fzf |
sink | string | Vim command to handle the selected item (e.g. e, tabe) |
sink | funcref | Reference to function to process each selected item |
sink* | funcref | Similar to sink, but takes the list of output lines at once |
options | string | Options to fzf |
dir | string | Working directory |
up/down/left/right | number/string | Use tmux pane with the given size (e.g. 20, 50%) |
window (Neovim only) | string | Command to open fzf window (e.g. vertical aboveleft 30new) |
launcher | string | External terminal emulator to start fzf with (GVim only) |
launcher | funcref | Function for generating launcher string (GVim only) |
fzf#vim#complete是一個helper函數,用來創建自己的自動補全功能。 如果第一個參數是一個命令字符或一個vim list, 那么它會被用作source.
" Replace the default dictionary completion with fzf-based fuzzy completion inoremapfzf#vim#complete("cat /usr/share/dict/words")
對于高級用戶,可以傳入一個字典選項。它的選項和fzf#run是一致的,除了下面幾個選項。
reducer (funcref)
把fzf的輸出轉成單一字符串
prefix (funcref or string; default: k*$)
用于匹配想自動補全字符串的正則表達式
或者是一個函數
source或options可以是一個函數引用, 它用prefix作為輸入參數,返回最終的值
sink或sink*被忽略
" 全局補全 (不僅僅是buffers. 需要安裝ripgrep) inoremapfzf#vim#complete(fzf#wrap({ "prefix": "^.*$", "source": "rg -n ^ --color always", "options": "--ansi --delimiter : --nth 3..", "reducer": { lines -> join(split(lines[0], ":zs")[2:], "") }}))
Reducer例子:
function! s:make_sentence(lines) return substitute(join(a:lines), "^.", "=toupper(submatch(0))", "")."." endfunction inoremap總結fzf#vim#complete({ "source": "cat /usr/share/dict/words", "reducer": function(" make_sentence"), "options": "--multi --reverse --margin 15%,0", "left": 20})
結合FZF,vim可實現快速文件跳轉,特別是在結合Rg或ctags或git以后,可以快速地跳轉到滿足某種條件的文件中。
希望大家可以結合FZF創造出更多的使用方法。有任何好點子,歡迎聯系本人
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25042.html
摘要:參考官網參考使用全指南安裝直接在插件管理器中其中會把命令行軟件安裝到本機的目錄中,然后在中就可以直接通過執行來使用命令搜索文件了。使用最簡單的話,直接在中輸入命令就會彈出當前目錄下的所有文件列表,然后可以各種模糊搜索,按和上下選擇。 不同于Command-T只能用于VIM,大名鼎鼎的fzf是命令行工具,而且只在VIM中使用的話也不需要手動去編譯任何依賴,直接用插件管理器安裝即可立馬使用...
閱讀 3267·2021-11-24 09:38
閱讀 2148·2021-11-23 09:51
閱讀 1738·2021-10-13 09:39
閱讀 2610·2021-09-23 11:53
閱讀 1394·2021-09-02 15:40
閱讀 3648·2019-08-30 15:54
閱讀 1121·2019-08-30 13:04
閱讀 2552·2019-08-30 11:01