Pull to refresh

Comments 45

А как добавить в git индекс все измененные, новые и переименованные файлы?
Спасибо за статью и продвижение vim. Я как пользователь vim(4 года уже) не представляю работу без него.
Самая крутая идея vim — это режимы редактирования и навигация, после освоения vim не как редактора, а как идеи для редактирования текста, жизнь становится ярче и повсюду радуги и единороги)
Сейчас у меня vim навигация в браузере, даже этот текст я пишу в vim(https://chrome.google.com/webstore/detail/wasavi/dgogifpkoilgiofhhhodbodcfgomelhe?hl=en-US), vim-like навигация в консоли, vim-mode в RubyMine, даже в клиенте твитерра под МакОс есть что-то на подобии такой навигации.

В общем, кто ценит свое время — изучайте vim. Удачи.
А чем так уж удобно разделение на режимы навигации и редактирования? Разве это наоборот не замедляет набор, особенно при написании кода, в котором не получится просто писать длинную партянку текста без постоянной навигации по тексту, как на печатной машинке.
vi-like навигация удобнее тем что не надо постоянно перепрыгивать на мышку и обратно.
Ну, мне скорей интересно, чем vim-like навигация лучше, в сравнении с навигацией в emacs, когда вся навигация висит на хоткеях… просто многие себе в томже emacs настраивают vim-like навигацию и утверждают, что так удобней, а я вот что-то пока не проникся этой темой…
Удобство в доступном для слепого метода печати сочитании клавишь.
ну постараюсь привести пример. есть код, мы в режиме «нормал». курсор в начале.
задача — заменить слово тест на «hello»

|some_method(«test»)

что нужно нажать в вим: f«ci»hello

как это сделать в простом редакторе?
«в простом редакторе» — умойтесь, все emacs-хейтеры, так emacs еще никто не опускал :)
я не доказываю что emacs-like навигация хуже, или любая другая, я говорю конкретно о себе. сейчас мой сетап это emacs + evil-mode.
Ну… пишем в init.el примерно такой код:

(defun goto-forward-quote ()
(interactive)
(search-forward-regexp "'+\\|\\\"+" nil t))

(global-set-key (kbd «C-») 'goto-forward-quote)

Он позволяет при помощи хоткея ходить по скобкам вперед.
Соответственно находясь в начале строки, можно нажать Ctrl+End, курсор перейдет в начало слова «test» а там с insert'ом заменяемяем «test» на «hello».

Но на пратике лично мне удобней пользоваться переходами по словам/символам и в конец строки/начало строки.
Клавиша End на моей клавиатуре расположена крайней справа (над Num-блоком). Как думаете, удобно будет в слепую искать ее там?
Ну так забиндить можно на любую удобную комбинацию)
Ctrl у меня тоже не совсем под пальцем ) Это не придирки, мне реально не удобно пользоваться комбинациями, отличными от чисто буквенных при слепом методе.
UFO just landed and posted this here
есть плагин для работы с Git и давольно популярный — Fugitive. Умеет много чего, например частичные коммиты (т.е. в коммит попадают только часть изменений текущего файла), советую.
Слышал. Он умеет GUI интерфейс и Vim-diff сравнение изменений?
diff умеет, на счёт веток не уверен.
Ну как я сказал в статье, diff бывает разный. О каком именно diff вы говорите? Или умеет оба?
vim-diff. Второй же можно просто получить командой git diff и отправить в буффер, но я не знаю зачем он нужен.
Второй же можно просто получить командой git diff и отправить в буффер

Так мы же не устанавливаем плагин для Vim, чтобы команды git diff запускать и отправлять выхлоп в буфер )

я не знаю зачем он нужен

Если вам нужно посмотреть различия сразу нескольких файлов, на пример.
Вы предлагаете написать плагин и в документации добавить: а вот эти команды слишком простые, просто добавьте себе в vimrc:
nnoremap ga…
nnoremap gb…
nnoremap gc…
?
Можно открыть буфер с выводом git status и затем на нужном файле нажать D, чтобы посмотреть git diff:

:Gstatus
D


Но обычно редактируемые файлы и так открыты в буферах и нужно только на нужных :Gdiff делать. Зачем полный вывод git diff (все файлы сразу) смотреть — не знаю.
Когда вы принимаете чужие изменения, гораздо проще смотреть полный Git-diff, чем открывать каждый файл в редакторе (предварительно записав куда то список измененных файлов) и читать их Git-diff.
Да, об этом я не подумал. Никогда не работал мэнтэйнером, для них действительно полезно.
В планах интегрировать vim_git с github или bitbucker так, чтобы можно было комментировать строки кода прямо из Vim. Не знаю, это фишка Git или конкретно этих веб-сервисов, но очень удобная.
Git тут абсолютно не при чём. Встроенная возможность что‐то комментировать есть только в fossil, но, насколько я знаю, там только встроенные в репозиторий wiki и issue tracker. Довольно долгое время bitbucket не давал возможность комментировать строки изменений.

Кстати, насколько я знаю, ни один из сервисов такой возможности не имеет: я знаю комментарии к строкам в различиях изменения, к самому изменению и к строкам в аггрегированных различиях PR, но не к строкам кода.

Кстати, а как вы будете делать такую возможность: system('curl') или +python/+ruby/…? Без просмотра имеющихся комментариев возможность не такая полезная.
Кстати, а как вы будете делать такую возможность: system('curl') или +python/+ruby/…?

Пока не знаю. Предпочтения я отдаю кроссплатформенным, легковесным и нативным решениям.
Ещё git diff полезен для самопроверки перед созданием изменения. Я даже в моём aurum автоматически открываю буфер с diff при фиксировании изменения. Разве вам никогда не хотелось окинуть взглядом все изменения, чтобы посмотреть (или поискать), не забыли ли вы где‐то отладочный print? Или (в случае с частичной фиксацией (пример: git add -p + git commit, но я использую другой интерфейс)) — проверить, что вы ничего не забыли из того, что хотели и забыли всё, что не хотели зафиксировать.
С этим я не спорю — полезный и часто используемый кейс. Я к тому, что в редакторе вывод diff всех файлов будет неудобен, на мой взгляд. Вызываю обычно из соседнего терминала в tmux/byobu.

Посмотрел — fugitive умеет и такой вывод (как в терминале). Он предоставляет обёртку над командами, которые напрямую не визуализирует. В данном случае :Git diff. Неудобно, что он как бы сворачивает vim и показывает это на весь терминал. Создать новый split и показать в нём было бы полезнее.
О том и речь, fugitive просто реализует Vim команды, которые выполняют git в терминале. Не вижу удобство такого плагина, когда есть :!git…
Он далеко не только это делает. Fugitive — удобнейший инструмент для работы с git. При наличии времени можете посмотреть серию vimcasts, чтобы увидеть его возможности:

#31 Fugitive.vim — a complement to command line git
#32 Fugitive.vim — working with the git index
#33 Fugitive.vim — resolving merge conflicts with vimdiff
#34 Fugitive.vim — browsing the git object database
#35 Fugitive.vim — exploring the history of a git repository

The Fugitive Series — a retrospective
Мой aurum находит самое большое окно по соседству с окном (это не единственный вариант: можно и split, а можно и отключить), в котором предполагается писать пояснения к изменению и открывает diff там. При отмене и фиксации изменения diff пропадает, предыдущий буфер возвращается на место (на случай если Delphinum будет делать такое в своём дополнении, напомню про &bufhidden: буфер нужно скрывать; и я читал людей, которые не используют set hidden).

Если вы посмотрите diff в командной строке, то он что‐то безвозвратно заменит. Иногда настолько безвозвратно, что и scrollback buffer не поможет. И ещё там нет свёрток (aurum имеет также в своём составе ftplugin, добавляющий свёртки к diff’ам: bitbucket.org/ZyX_I/aurum/src/ee5d7e8121f3e7380eb5abedf42895346294cccc/ftplugin/diff.vim, можно использовать без aurum и его зависимостей, что даже удивительно (обычно я пишу всё с зависимостью, как минимум, от frawor)).

Git diff, насколько я понимаю, практически напрямую вызывает :!git diff. Бесполезная возможность по мне.
И ещё там нет свёрток

Vim из коробки умеет свертки diff.

Git diff, насколько я понимаю, практически напрямую вызывает :!git diff. Бесполезная возможность по мне.

Если выбрасывать его в Vim, то гораздо удобнее, чем читать в терминале, ибо подсветка, сверки, vim-like управление и т.д.
Вообще‐то я говорил про терминал. Но Vim всё равно не умеет свёртки из коробки: code.google.com/p/vim/source/browse/runtime/ftplugin/diff.vim?r=bfc3682510d68e594ef3a81ffaaf16468c8276e2. Где здесь свёртки:
" Vim filetype plugin file
" Language: Diff
" Maintainer:   Bram Moolenaar <Bram@vim.org>
" Last Change:  2005 Jul 27

" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
  finish
endif
let b:did_ftplugin = 1

let b:undo_ftplugin = "setl modeline<"

" Don't use modelines in a diff, they apply to the diffed file
setlocal nomodeline
?
Если выбрасывать его в Vim, то гораздо удобнее, чем читать в терминале, ибо подсветка, сверки, vim-like управление и т.д.
Именно об этом я и говорю.
Где здесь свёртки?

Я об этом:
Vim-diff

Я я о свёртках diff’ах. Не в vimdiff, он тут совсем не при чём, а в буферах с патчем и filetype=diff.
Есть простые решения, но зачем, если git diff сам обрезает файл, оставляя только строки с изменениями.
Вообще‐то в этой ветке обсуждался полный diff. И вы сами говорили, зачем такое нужно: habrahabr.ru/post/261783/#comment_8488049. И я говорил, что полный diff у меня для review. Свёртки пригождаются при просмотре больших diff’ов.
Так я и говорю — зачем свертки, если git diff сам отрезает строки, которые расположены слишком далеко от измененных строк.
И вы явно не поняли, что сворачивается. А сворачиваются во‐первых, каждый файл отдельно (первый уровень). Во‐вторых, каждый кусок (hunk) — то, что имеет строку вида @@ -3491,3 +3491,4 @@ в качестве заголовка (последняя свёртка полезна в основном только если вы использовали --show-c-function или аналог при создании diff’а) — второй уровень.
Вот так, конечно, намного понятнее )
Кстати, есть одна возможность в aurum, которую я, на момент его разработки, нигде не видел и использую часто: AuHyperlink, копирующая в буфер обмена различные URL: обычно ссылки на HTML или RAW версии файла, первые — часто с конкретными указаниями на строку, ещё есть clone и push URL (не использовались почти никогда, т.к. URL’ы от GH и BB я могу и по памяти написать), ссылки на просмотр изменения в веб‐интерфейсе (использовались редко), ссылка на лог (использовалась практически только для тестов). Fugitive имеет вместо этого :Gbrowse, но я совершенно не понимаю, зачем (зато есть :Gbrowse!, использующий clipboard; AuHyperlink имеет бесконечно больше двух вариантов использования, но только один легко доступен по‐умолчанию). (Ещё fugitive имеет :Gbrowse {rev}@{remote}, а у меня @{remote} нет, что нехорошо.)
Sign up to leave a comment.

Articles