Mac developers often work in the Terminal to use the Swift package manager, install macOS packages with Homebrew, collaborate on projects with Git and GitHub, run server side Swift code, etc. Below are some tips for working in the macOS Terminal.
The Z shell (or zsh) is the default shell for macOS. Pure improves the zsh command prompt in the terminal. Use the suggested theme in the Pure documentation.
Create a ~/.zshrc file to configure the Z shell. The .zshrc file shown below assumes Pure, Xcode, and Miniconda have been installed on the Mac.
# Pure prompt configuration
# https://github.com/sindresorhus/pure
# ----------------------------------------------------------------------------
fpath+=$HOME/.zsh/pure
autoload -U promptinit; promptinit
prompt pure
PURE_GIT_DOWN_ARROW=⬇︎
PURE_GIT_UP_ARROW=⬆︎
# Coreutils aliases
# brew install coreutils
# ----------------------------------------------------------------------------
# List files line-by-line including hidden files
alias la="gls -aho --group-directories-first --color=auto"
# List files line-by-line excluding hidden files
alias ll="gls -ho --group-directories-first --color=auto"
# Zsh configuration
# ----------------------------------------------------------------------------
# Change to ~/Desktop when launching terminal
cd ~/Desktop
# Enable completion system
autoload -Uz compinit && compinit
# Enable color for `ls` output
export CLICOLOR=1
# Set VIM as the default terminal editor
export VISUAL=vim
export EDITOR=vim
# Use ipdb as the Python breakpoint() debugger
export PYTHONBREAKPOINT=ipdb.set_trace
# Open Sublime Text from command line
alias subl="/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl"
# Change directory without using `cd`
setopt AUTO_CD
# List files after changing directory
function chpwd() {
emulate -L zsh
la
}
# Workaround for Visual Studio Code integrated terminal
if [[ -v VSCODE_GIT_IPC_HANDLE ]]; then
conda deactivate
conda activate
fi
Various keyboard shortcuts for working with the command line prompt.
# My preferred permissions for folders and files
chmod 755 # folder permissions
chmod 644 # file permissions
# Copy all the files in a folder into another folder
cp -R folderA/. folderB
# List the contents of a folder or of a specified folder
ls
ls folderA/
# Rename a file or folder
mv oldname.txt newname.txt
mv oldfolder/ newfolder/
# Remove a folder that already contains files
rm -rf folderA/
# Move all files from one folder to another folder. Example below demonstrates
# moving all the files from the Downloads folder to the Videos folder
mv ~/Downloads/* ~/Videos
Open a file from the macOS terminal.
open fileA.txt # open a file in its default application
open -a safari fileA.txt # opens with the specified application
open -R fileA.txt # selects the file in a Finder window
hdiutil attach Secure.dmg # mount a dmg volume named "Secure.dmg"
hdiutil detach /Volumes/Secure # unmount a volume named "Secure"
Gavin Wiggins © 2024