Як використовувати vim як різний інструмент?


101

Я використовую vim як основний редактор.

Я також хотів би використовувати vim для розрізнення файлів і модифікації файлів, роблячи diff для виправлення легких змін (а не більшості методів diff, які є циклом diff / fix / diff / fix).

Крім того, є прості способи інтегрувати vim у різні інструменти, що використовуються інструментами / сайтами для контролю джерел (я конкретно думаю про git, але я впевнений, що інші люди будуть зацікавлені в інтеграції з іншими інструментами / сайтами для управління джерелами).


1
ви повинні спробувати vim-fugitive, він додає команди, :Gdiffі :Gvdiffобидві команди дають змогу бачити бічний бік поточного буфера, якщо вашим поточним буфером керує git. Це також допоможе вам вирішити конфлікти у макеті трьох вікон, коли у вас є конфлікти об’єднань у деяких файлах
rbernabe

У мене в Bashrc ця проста функція, vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }і я запускаю її vd file1 file2. Він використовує diffдля визначення, чи відрізняються файли, і відкриється лише в тому vimdiffвипадку, якщо це так. В іншому випадку я залишаюся в оболонці. Я також вимикаю виділення синтаксису у Vim, оскільки вважаю, що це відволікає увагу при різниці. Працює лише з двома файлами.
Рольф

Відповіді:


122

vim вбудований цей функціонал (з правильним прапором командного рядка).

vim -d <file1> <file2>

Це відкриває кожен файл у вигляді та виділяє відмінності.
Будь-який ідентичний код foldedвідсутній, тому вам не потрібно дивитися на однаковий код або прокручувати величезні шматки однакового коду.

Але є також програма для обгортки, vimdiffяка правильно викликає vim з правильними прапорами.

vimdiff source1.cpp source2.cpp

Якщо ви використовуєте git, ви можете налаштувати зовнішній інструмент "diff". Тому легко встановити vimdiff як відмінний інструмент для git.

git config --global diff.tool vimdiff

Під час використання vimdiff ви можете редагувати обидві сторони, а підсвічування розрізнень утримує темп, щоб показати вам відмінності.

Примітка. Під час редагування від git diff. Якщо ви спробуєте відредагувати збережену в сховищі версію файлу, ваші зміни будуть відкинуті при виході (git не довіряє вам оригіналу, тому ви відрізняєтесь від копії tmp), але ви можете відредагувати локальну копію для вмісту ваших сердець і збережіть його над вами поточною версією.

Деякі основні команди, які корисні в vimdiff

dp             diffput: puts changes under the cursor into the other file
                        making them identical (thus removing the diff).
do             diffget: (o => obtain). The change under the cursor is replaced
                        by the content of the other file making them identical.


]c             Jump to the next diff
[c             Jump to the previous diff

Інші налаштування vim, які я використовую для роботи з підкресленням з vimdiff

if &diff
    highlight! link DiffText MatchParen
endif

Це вимикає виділення на бітах коду, які змінюються. Отже рядок, який змінюється, виділяється, щоб я міг помітити зміни, але власне текст, який змінився, виділяється на рядку (як це не виділено).


Також обробляє до 4 буферів, що робить його чудовим для порівняння файлів конфігурації
Izkata

34
Ви також можете скористатися :diffthisкомандою, щоб ініціювати diff, коли Vim вже запущений.
Багатий

11
І: diffoff, щоб вимкнути його. Я думаю, що посилання на документацію vim буде корисною: vimdoc.sourceforge.net/htmldoc/diff.html
опитування Коді

1
Для мене навіть після git config --global diff.tool vimdiff, git diffвсе ще показує все, як якщо я нічого не змінюю.
Привіт-Ангел

2
спробуйтеgit difftool
Мартін Йорк

13

Якщо ви редагуєте відкритий файл і хочете порівняти його з іншим файлом, не закриваючи поточний:

Відкрийте новий файл на розділеному екрані:

Для вертикального розколу:

:vs otherFile

або горизонтальний розкол:

:split otherFile

Переключення курсорів на різні розділені екрани:

ctrl+w ctrl+w

Викликати "різний режим" у файлі:

:diffthis

Переключіться на інший файл і запустіть "різний режим":

:diffthis

Щоб вимкнути "різний режим":

:diffoff

5
Для того, щоб уникнути перемикань між буферами , які можна використовувати :windo diffthisтеж
statox

4

Ви можете розмістити нижче згаданих налаштувань у .gitconfigфайлі, знайденому в %homepath%(або %userprofile%) каталозі користувача, який наразі увійшов у систему:

[diff]
    tool = vimdiff

Це дасть можливість інструменту git bash також почати використовувати vimdiff як зовнішній інструмент diff.



2

Я бачу лише три ситуації, щоб використовувати vim як дифтол. Вони коротко описані нижче:

  • Для git difftool введіть у свій текст наступне ~/.gitconfig:

    [core]
    editor = vim
    [diff]
    tool = vimdiff
    [merge]
    tool = vimdiff
    conflictstyle = diff3
    
  • Щоб відкрити vim як розрізний інструмент для двох файлів, ви можете зробити наступне:

    vimdiff file1.ext file2.ext      # for vim
    nvim -d file1.ext file2.ext      # for neovim
    
  • Для отримання різного перегляду для активних в даний час буферів, тобто для всіх буферів, яким призначено вікно на поточній активній вкладці, ви можете зробити наступне:

    :windo diffthis                " to get diff view
    :windo diffoff                 " to remove diff view
    

Для отримання додаткової інформації див :h diff


1

ось що я роблю:

  • відкрийте вікно з першим файлом (або текстовим вмістом, якщо ви вставляєте дані)
  • відкрийте наступний файл / вікно, використовуючи :vnew(щоб обидва вікна були поруч) або :new(щоб вікна були зверху та знизу). якщо у другому вікні відкривається певний файл, ви можете включити такий шлях::vnew /path/to/secondfile.txt
  • використовуйте F8, щоб увімкнути спеціальну функцію, яка вмикає та вимикає режим розм

ось спеціальна функція, яка в мене ~/.vimrc:

nmap <silent> <F8> :call ToggleDiff()<CR>
imap <silent> <F8> <C-O>:call ToggleDiff()<CR>
function ToggleDiff ()
    if (&diff)
        set nodiff noscrollbind
    else
        " enable diff options in both windows; balance the sizes, too
        wincmd =
        set diff scrollbind nowrap number
        wincmd w
        set diff scrollbind nowrap number
        wincmd w
    endif
endfunction

ви можете використовувати команду, :diffthisі diffoff!тому вам не доведеться самостійно встановлювати всі параметри різниці (наприклад, курсорний зв'язок також встановлюється diffmode)
Крістіан Брабандт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.