我想在vimscript中编写一个回显所选文本的函数,如果没有选择文本,则写入整个缓冲区。
我如何区分这两种情况?
答案 0 :(得分:3)
定义两个映射,一个:nmap
使用整个缓冲区,一个:vmap
用于所选文本。两者都可以调用相同的函数,传递isVisual
布尔标志或mode
参数。
其他任何内容(自定义命令,直接函数:call
)都需要显式提示,因为为了调用它们,已经保留了可视模式(对于命令行模式)。您也无法使用'<,'>
标记进行检测,因为即使在删除后,它们也会保留最后选项。
答案 1 :(得分:1)
我写了一个函数来获取visually selected text
。
我希望它可以帮到你。
function! GetSelected()
" save reg
let reg = '"'
let reg_save = getreg(reg)
let reg_type = getregtype(reg)
" yank visually selected text
silent exe 'norm! gv"'.reg.'y'
let value = getreg(reg)
" restore reg
call setreg(reg,reg_save,reg_type)
return value
endfun
" viusal map
vnoremap gs :<C-U>echo GetSelected()<CR>
" normal map
nnoremap gs :<C-U>echo join(getline(1, '$'), "\n")<CR>