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