Git: чи можна поетапно обрати область безпосередньо з файлового буфера?


14

За допомогою програми Magit можна відкрити буфер статусу магніту, натиснути, TABщоб розширити діфф (або RETвивести окремий буфер диференціалів), позначити частини частини і натиснути sабо uдля постановки / нестабільності області. Дійсно приємно.

Я хотів би знати, чи можливо:

  • редагувати файл
  • виберіть область, команду або кілька запитів прямо у буфері файлів
  • стадія / нестабільність вибраного регіону або перегину навколо точки

Ви, здається, трохи розгублені з приводу проти регіону. Я відредагував вам опис того, що робить магіт і ваші запитання. Я, мабуть, не здогадався правильно, що ти мав намір запитати.
Тарсій

@tarsius Можливо, я заплутався, для мене регіон - це те, що я тільки що вибрав у буфері, а команда - обраний регіон, готовий до постановки. Я помиляюся?
Nsukami _

2
"Регіон" - це термін Emacs, це річ між точкою та позначкою, тобто "вибір". "Hunk" - термін Git, який починається, наприклад, з "@@ -1,1 +1,1" і закінчується безпосередньо перед наступним заголовком, який починається новим загоном. Magit виділяє поточний розділ (який може бути секцією) приблизно так само, як Emacs, як правило, виділяє регіон, так що, можливо, сприяв вашій плутанині.
Тарсій

1
У статусі магніту чи буфера, що відрізняється лише від розрізів, ви можете встановити поточну деталь незалежно від місця, де ви просто натискаєте клавішу s. Але ви також можете встановити лише частину елемента, позначивши його частини (так само, як ви це зробили в буфері відвідування файлів), а потім встановіть саме це.
Тарсій

@tarsius саме те, що я маю на увазі, моя англійська мова просто недостатньо гостра.
Nsukami _

Відповіді:


11

Ні, Магіт цього не підтримує. Можливо, майбутні версії. Git-Gutter зараз підтримує це. Команда названа git-gutter:stage-hunk.


У той час як це робиться на грунті, воно не ставить регіон.
окудо

Я вважаю, що найкраще створити прив'язку для постановки на парку, а потім ще одну, щоб перейти до наступної частини, сцени та повторити. Існує також спосіб сценізувати весь буфер, але в цей момент ви можете також зробити це з командного рядка. Я вважаю, що найкраще робити комісії на рівні блоку за допомогою git-gutter + magit. Більші зміни не підходять для git-gutter.
Droogans

1

Як згадувалося раніше, git-gutter - це розширення, призначене для показу інформації git безпосередньо у вашому файлі та роботи звідти, в той час як magit зосереджується на роботі на діфф.

Ця функція не планується найближчим часом для жолобів gitter ( https://github.com/syohex/emacs-git-gutter/isissue/91 )

Однак це щось таке, що Emacs lisp повинен бути дуже хорошим у витиранні (пройдіться через хунки в регіоні та поставити їх за раз). Спробувавши це, це було майже так, єдина проблема полягала в тому, що git-gutter починає фоновий процес після того, як ви поставите лунку, і не чекаєте, коли це закінчиться, тому мені довелося додати трохи хиткої магії, щоб вирішити це.

Наступна функція lisp emacs повинна робити те, що ви хочете. Ви можете прив’язати його до деяких клавіш.

(defun my-git-stage-region ()
  (interactive)
  (let ((git-gutter:ask-p nil)
        (start (region-beginning))
        (end (region-end)))
    (save-excursion
      (goto-char start)
      (git-gutter:next-hunk 1)
      (while (< (point) end)
        (git-gutter:stage-hunk)
        ;; This is a hack to wait for git-gutter to finish
        ;; updating information (git-gutter kicks
        ;; of a process to update the diff information
        ;; and does not block)
        (while (get-buffer (git-gutter:diff-process-buffer (git-gutter:base-file)))
          (sit-for 0.05))
        (git-gutter:next-hunk 1)))))

ПРИМІТКА. Це не може розколоти хангів, опіки або повністю інсценовані, або зовсім не інсценовані. Однак у git-gutter, як правило, є відносно невеликі нотки, саме тому я застосував цю функцію.
Att Righ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.