Я нашел this function:программирует дифф ВИМ функции ВИМ дифф отображение
" 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
Теперь я хотел бы добавить дополнительное условие, если есть выбранный текст (визуальный режим) вызвать другую команду вместо diffthis
, Linediff
Чтение функции Я предполагаю, что мне нужна дополнительная опция для тестирования, например, с &dif
, но с визуальной опцией. Что-то вроде:
function! DiffToggle()
if &dif
diffoff
elseif &visual
Linediff
else
diffthis
endif
:endfunction
Это не работает, но есть ли у кого-нибудь подсказки, чтобы заставить его работать? Кроме того, было бы очень полезно использовать любую ссылку о том, что и как установить переменные такого типа в vim.
Редактировать Я закончил с этим в моем vimrc, (работы):
"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
'ElseIf имеет ('визуальный') '? ': help has()' –
Или если вам нужно проверить текущий режим (визуальный, вставить, обычный и т. Д.), Вызывается 'mode()'. –
имеет() только сообщает вам, поддерживается ли функция, поэтому в моем случае всегда возвращается 1 – vivoconunxino