iTerm2 has a lot of little-known features that can make development much easier.
If you work in a large codebase, chances are you often need to open commits on Github, or revisions in Phabricator or tickets in your in-house bug tracker. This usually involves copying and pasting an identifier into a URL and opening that in your browser. For example, you may want to open commit hashes or PRs on Github with a single click. You can make iTerm2 recognize arbitrary ids and take custom actions using them when they are Command-clicked via Smart Selections.
Here are a couple of examples:
To make Command-clicking on a commit hash open it in Github, do the following:
Profiles -> Advanced -> Smart Selection -> Edit
+
button to add a new rule and set the Regular Expression
to [0-9a-f]{7,40}
Edit Actions...
and add a new actionAction
to Run Command...
Parameter
to cd "\d" && /usr/local/bin/hub browse -- commit/\0
. You may have to update the path to hub
here if you installed it to a different directory.Once this is done, Command-click
on a commit hash in iTerm2 should open it in its respective repository if it exists on Github. You can customize this technique to open PRs and Issues on Github as well.
Profiles -> Advanced -> Smart Selection -> Edit
+
button to add a new rule and set the Regular Expression
to D[:number:]{5}
Edit Actions...
and add a new actionAction
to Open URL...
Parameter
to https://secure.phabricator.com/\0
or a similar URL for your organization.If you work on a project that requires starting a number of terminal sessions in specific conditions, it can get annoying to get your environment running from scratch. iTerm2's Dynamic Profiles allow you to create custom profiles that can depend on other profiles. You can use this to create a hierarchy of profiles that share your common settings but run different commands on startup.
For example, say your project always needs you to be running npm run build
, npm run server
and npm run worker
during development. You can use dynamic profiles to start iTerm2 with all of these commands running as follows:
uuidgen
in your terminal four times and copying the results.~/Library/Application Support/iTerm2/DynamicProfiles
with these contents (fill in the parts in <...>
):{ "Profiles": [ { "Name": "Development", "Guid": "<guid1>", "Dynamic Profile Parent Name": "Default", "Working Directory": "<path-to-your-project>", "Custom Directory": "Yes" }, { "Name": "Build", "Guid": "<guid2>", "Dynamic Profile Parent Name": "Development", "Initial Text": "npm run build" }, { "Name": "Server", "Guid": "<guid3>", "Dynamic Profile Parent Name": "Development", "Initial Text": "npm run server" }, { "Name": "Worker", "Guid": "<guid4>", "Dynamic Profile Parent Name": "Development", "Initial Text": "npm run worker" } ] }
These profiles should now show up in iTerm2 as dynamic profiles. You can then start sessions with these profiles to create a window arrangement and hit Command-Shift-S
to save it. Then you can start all of these sessions at any time by just pressing Command-Shift-R
or tell iTerm2 to open the arrangement when it starts! Check out https://blog.andrewray.me/how-to-create-custom-iterm2-window-arrangments/ for a detailed guide on window arrangements.