Змініть колірну схему, коли викликаєте vimdiff всередині Vim


4

Я використовую плагін VCSCommand .

Я телефоную утиліту VimDiff всередині Vim, зателефонувавши :VCSVimDiff.

У мене є vimrc:

if &diff
    set t_Co=256
    set background=dark
    colorscheme peaksea
else
    colorscheme molokai
endif

Він працює, коли я дзвоню vimdiffз консолі, але не тоді, коли я телефоную з Vim за допомогою VCS.

Це проблема з плагіном або vimrcконфігурація, якої немає?

Відповіді:


6

Vim читає ваш vimrc один раз, при запуску. if &diffОператор виконується , коли читається, не кожен раз , коли стан 'diff'змінюється. Один із способів виконання цих кольорових команд під час виконання :VCSVimDiff- це помістити їх у автокоманду у своєму vimrc, як це.

au FilterWritePre * if &diff | set t_Co=256 | set bg=dark | colorscheme peaksea | endif

де FilterWritePreподія є подією, яка запускається, коли Vim виконує розл.

[Коментар не спрацював добре, тому я додам свою оригінальну відповідь.]

Якщо ви хочете закінчити VimDiff :q, то, що ви можете зробити, це налаштувати інший автокоманд, можливо, використовуючи BufWinLeaveподію, знову тестуючи &diffта виконуючи команди, щоб встановити стандартну схему кольорів за замовчуванням.

Що я роблю, це використовувати наступну команду, щоб видалити буфер, проти якого я відрізнявся, вимкнути диф-режим і відновити збережені параметри.

command! -bar -bang Nodiff wincmd l <bar> only<bang> <bar> set nodiff noscrollbind scrollopt-=hor wrap foldcolumn=0 virtualedit= foldlevel=99 <bar> if exists("b:fdm") <bar> let &fdm = b:fdm <bar> endif <bar> if exists("b:syn") <bar> let &syn = b:syn <bar> endif

Щоб здійснити та / або зберегти ці налаштування, коли введено режим Diff, я використовую такі автокоманди.

au FilterWritePre * if &diff | set virtualedit=all | endif
au FilterWritePre * exe 'let b:syn = &syn | if &diff | set syn=OFF | endif'
au BufWinEnter * if &fdm != "diff" | let b:fdm = &fdm | endif

Ці команди розвивались роками, що є моїм виправданням за їх непослідовність.


Цікаво. Дійсно, це працює. Чи знаєте ви рішення "повернутися" до початкової схеми кольорів, коли я закінчу VimDiff з: q?
Хтось досі використовує вас MS-DOS

Якщо ви хочете закінчити VimDiff з: q, то, що ви можете зробити, це встановити іншу автокоманду, можливо, використовуючи подію BufWinLeave, знову тестуючи діф і виконуючи команди, щоб встановити стандартну схему кольорів за замовчуванням. Що я роблю, це використовувати наступну команду, щоб видалити буфер, проти якого я відрізнявся, вимкнути диф-режим і відновити деякі збережені налаштування. командувати! -bar -bang Nodiff wincmd l <bar> тільки <bang> <bar> встановити nodiff noscrollbind scrollopt- = hor wrap foldcolumn = 0 virtualedit = foldlevel = 99 <bar> якщо існує ("b: fdm") <bar> let & fdm = b: fdm <bar> endif <bar> якщо існує ("b: syn") <bar> нехай & syn = b: syn <bar> endif
garyjohn

Зміст вищевказаного коментаря я перемістив у відповідь.
garyjohn

Зауважте, що Vim 7.4 відновлює ваші налаштування при відключенні різного режиму.
Крістіан Брабандт

1

На жаль, у Vim немає явних подій різного режиму. Ви можете певною мірою зламати це з пропозиціями інших відповідей.

В якості альтернативи цього підходу, ви можете створити функцію , яка обертає diffthisі diffoffта змінити налаштування в цій функції.

nnoremap <leader>df :call ToggleDiff()<CR>

function! ToggleDiff()
    if &diff
        diffoff
        setlocal syntax=on
    else
        diffthis
        setlocal syntax=off
    endif
endfunction

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.