首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编程diff vim函数,vim diff映射

编程diff vim函数,vim diff映射
EN

Stack Overflow用户
提问于 2015-06-12 11:07:26
回答 1查看 188关注 0票数 1

我找到了这一功能

代码语言:javascript
复制
" Set up a keymapping from <Leader>df to a function call.
" (Note the function doesn't need to be defined beforehand.)
" Run this mapping silently. That is, when I call this mapping,
" don't bother showing "call DiffToggle()" on the command line.
nnoremap <silent> <Leader>df :call DiffToggle()<CR>

" Define a function called DiffToggle.
" The ! overwrites any existing definition by this name.
function! DiffToggle()
    " Test the setting 'diff', to see if it's on or off.
    " (Any :set option can be tested with &name.
    " See :help expr-option.)
    if &diff
        diffoff
    else
        diffthis
    endif
:endfunction

现在我想添加一个额外的条件,如果有一些选定的文本(可视模式)调用另一个命令,而不是diffthisLinediff

阅读这个函数,我想我需要一些额外的set选项来测试,就像他们用&dif做的那样,但是使用了可视选项。类似于:

代码语言:javascript
复制
function! DiffToggle()
    if &dif
        diffoff
    elseif &visual
        Linediff
    else
        diffthis
    endif
:endfunction

这不起作用,但有没有人有任何线索让它发挥作用?此外,它将非常有用的任何参考,关于什么和多少这类设置变量是在vim。

编辑I在我的vimrc (Works)中得到了这样的结果:

代码语言:javascript
复制
"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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 15:22:44

只需调用一个与xnoremap <Leader>df ...稍有不同的函数?当您处于可视模式时,将调用该功能。

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

代码语言:javascript
复制
nnoremap <silent> <Leader>df :call DiffToggle('n')<CR>
xnoremap <silent> <Leader>df :call DiffToggle('x')<CR>

..。并检查函数中的a:mode,其原型如下:

代码语言:javascript
复制
function! DiffToggle(mode)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30801562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档