检查vimscript中是否存在选择

时间:2014-04-27 08:08:11

标签: vim

我想在中编写一个回显所选文本的函数,如果没有选择文本,则写入整个缓冲区。

我如何区分这两种情况?

2 个答案:

答案 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>