编程diff vim功能,vim diff映射

编程diff vim功能,vim diff映射,vim,Vim,我发现: 这是行不通的,但有人有任何线索可以让它起作用吗? 此外,关于vim中此类设置变量的内容和数量的任何参考都非常有用 编辑 我在我的vimrc(作品)中得出了这个结论: “LINEDIFF/VIMDIFF "-------------- nnoremap df:调用DiffToggle('n') xnoremap df:调用DiffToggle('x') 功能!DiffToggle(模式)范围 回声“difftoggle…” if&diff 迪福夫 回声“diffoff…” 其他的 如果a

我发现:

这是行不通的,但有人有任何线索可以让它起作用吗? 此外,关于vim中此类设置变量的内容和数量的任何参考都非常有用

编辑 我在我的vimrc(作品)中得出了这个结论:

“LINEDIFF/VIMDIFF
"--------------
nnoremap df:调用DiffToggle('n')
xnoremap df:调用DiffToggle('x')
功能!DiffToggle(模式)范围
回声“difftoggle…”
if&diff
迪福夫
回声“diffoff…”
其他的
如果a:mode=='x'
回声“linediff…”
回音a:第一行
调用linediff#linediff(a:firstline,a:lastline)
其他的
回声“diff…”
迪菲斯
恩迪夫
恩迪夫
:endfunction

只需调用与
xnoremap df…稍有不同的函数。
?当您处于可视模式时,将调用该函数

或者,将模式作为参数传递给函数:

nnoremap <silent> <Leader>df :call DiffToggle('n')<CR>
xnoremap <silent> <Leader>df :call DiffToggle('x')<CR>

elseif有('visual')
<代码>:help has()或如果需要检查当前模式(可视、插入、正常等),则调用
模式()
。has()仅告诉您该功能是否受支持,因此在我的情况下总是返回1,但vim没有名为
可视的选项。检查此
:选项摘要
,我知道了,我刚刚检查过:)嗨,激光,我试过了,但没有正常工作,现在它在visualmode中选择的每行执行一次DiffToggle。我可以让它只执行一次吗?我想你需要在你的函数原型中添加
range
关键字(
h:function
/range
)”当添加[range]参数时,函数需要处理一个范围本身。该范围作为“a:firstline”和“a:lastline”传递。如果[range]被排除:{range}call“将调用范围中每一行的函数,光标位于每一行的开头。请参阅|函数范围示例|。”很好,现在它只运行一次,但范围仅设置为当前行(而不是选定的几行)。顺便说一句,我现在很忙,但我以后会再试一次。非常感谢您的建议该范围仅在视觉模式下使用,您必须自己处理该情况,即使用
getline(i)
with
i
a:firstline
移动到
a:lastline
)。
function! DiffToggle()
    if &dif
        diffoff
    elseif &visual
        Linediff
    else
        diffthis
    endif
:endfunction
"LINEDIFF/VIMDIFF
 "--------------

nnoremap <silent> <Leader>df :call DiffToggle('n')<CR>
xnoremap <silent> <Leader>df :call DiffToggle('x')<CR>

function! DiffToggle(mode) range
    echo "difftoggle..."
    if &diff
        diffoff
        echo "diffoff..."
    else
        if a:mode=='x'
            echo "linediff..."
            echo a:firstline."---".a:lastline
            call linediff#Linediff(a:firstline, a:lastline)
        else
            echo "diff..."
            diffthis
        endif
    endif
:endfunction
nnoremap <silent> <Leader>df :call DiffToggle('n')<CR>
xnoremap <silent> <Leader>df :call DiffToggle('x')<CR>
function! DiffToggle(mode)