As busy developers, interruption is inevitable.
Someone asks a question and we need to research some code, so we open files, switch branches or change projects, The position of the editor gets lost.
Eventually the disruption ends and we we want to return to where we left off.
Sure, we can search or click around to re-open those files and close tabs.
But wait... there is another way 😅
We can use
git history to control what files are opened by our editor.
When returning to a repo that has uncommitted changes, it would be nice to re-open all changes in one shot.
git ls-files command can give us a list of changed file names. The command requires some flags to return both modified
--modified and new files
--others. It's also a good idea to use
--exclude-standard, just to skip files excluded by
> #...modify file1.js > #...modify file2.js > #...add file3.js > git ls-files . --modified --others --exclude-standard file1.js file2.js file3.js
Armed with the list of modified files, we can setup a bash
alias to open these file with our editor:
# ~/.bash_aliases # for vim # vim -O opens a split window alias mods='vim -O $(git ls-files . --modified --exclude-standard --others)' # for vscode alias mods='code $(git ls-files . --modified --exclude-standard --others)'
Now simply type
mods - and presto - your editor opens with all the modified files. ✨
When working on a branch, it's common to continue work based on the last commit. Maybe a reviewer suggested an edit on GitHub, or there's a typo. It would be awesome to just re-open the last commit right where we were.
This is very similar to what we did before, except this time the file list comes from the previous commit.
We can use the
git diff-tree <sha> command to get the file list from a commit. We only want names
--name-only and don't need the commit id
--no-commit-id, and we only want files from the last commit (aka
> git diff-tree --no-commit-id --name-only HEAD file1.js file2.js
Just like before, we can setup a bash
alias to pass the files list to our editor:
# ~/.bash_aliases # for vim alias amend='vim -O $(git diff-tree --no-commit-id --name-only -r HEAD)' # for vscode alias amend='code $(git diff-tree --no-commit-id --name-only -r HEAD)'
Now you can type
amend - and voila - you are editing the files from the last commit ✨
Top comments (4)
Was hoping this wasen't a long post explaining
git config --global core.editorworks, given the title. But these are actually really nice tools! Thanks for sharing!
Huh... I thought I was about the only person still editing file in vi/vim rather than an IDE. :p
vim 4 life 🤘
Very helpful, thanks!