vim fzf 获取选定的单词作为 --query 参数
vim fzf get selected word as --query parameter
我实际上是在 vim 中使用 :FZF
进行模糊搜索,但是使用这样的参数 :FZF -q /tmp/boulou
但是,将 /tmp/boulou
替换为在可视模式中选择的单词并将其绑定到 vmap。
你有什么想法可以帮助我吗?
谢谢,亲切的问候
根据 xolox answer,您可以像这样创建映射:
function! s:getVisualSelection()
let [line_start, column_start] = getpos("'<")[1:2]
let [line_end, column_end] = getpos("'>")[1:2]
let lines = getline(line_start, line_end)
if len(lines) == 0
return ""
endif
let lines[-1] = lines[-1][:column_end - (&selection == "inclusive" ? 1 : 2)]
let lines[0] = lines[0][column_start - 1:]
return join(lines, "\n")
endfunction
vnoremap <silent><leader>f <Esc>:FZF -q <C-R>=<SID>getVisualSelection()<CR><CR>
请记住,它仅适用于选词。它不适用于包含制表符的多行或选择。您只需要调用函数而不是命令,但由于我没有安装 fzf,您必须自己执行此操作。
如需查找光标下的词(普通模式):
nnoremap <silent><leader>f :FZF -q <C-R>=expand("<cword>")<CR><CR>
我实际上是在 vim 中使用 :FZF
进行模糊搜索,但是使用这样的参数 :FZF -q /tmp/boulou
但是,将 /tmp/boulou
替换为在可视模式中选择的单词并将其绑定到 vmap。
你有什么想法可以帮助我吗?
谢谢,亲切的问候
根据 xolox answer,您可以像这样创建映射:
function! s:getVisualSelection()
let [line_start, column_start] = getpos("'<")[1:2]
let [line_end, column_end] = getpos("'>")[1:2]
let lines = getline(line_start, line_end)
if len(lines) == 0
return ""
endif
let lines[-1] = lines[-1][:column_end - (&selection == "inclusive" ? 1 : 2)]
let lines[0] = lines[0][column_start - 1:]
return join(lines, "\n")
endfunction
vnoremap <silent><leader>f <Esc>:FZF -q <C-R>=<SID>getVisualSelection()<CR><CR>
请记住,它仅适用于选词。它不适用于包含制表符的多行或选择。您只需要调用函数而不是命令,但由于我没有安装 fzf,您必须自己执行此操作。
如需查找光标下的词(普通模式):
nnoremap <silent><leader>f :FZF -q <C-R>=expand("<cword>")<CR><CR>