Bash has the PROMPT_DIRTRIM option, e.g. when I set PROMPT_DIRTRIM=3, then a long path like:
user@computer: /this/is/some/silly/path
would show instead as:
user@computer: .../some/silly/path
Does a similar option exist for zsh?
To get a similar effect like in bash, that is including the ..., try using:
%(4~|.../%3~|%~)
in in your PROMPT variable (which might be also named PS1 in your configuration) place of %~.
This checks, if the path is at least 4 elements long (%(4~|true|false)) and, if true, prints some dots with the last 3 elements (.../%3~), otherwise the full path is printed (%~).
I noticed that bash seems to shorten paths in the home directory differently, for example:
~/.../some/long/path
For a similar effect, you may want to use:
%(5~|%-1~/…/%3~|%4~)
This checks, whether the path is at least 5 elements long, and in that case prints the first element (%-1~), some dots (/…/) and the last 3 elements. It is not exactly the same as paths, that are not in your home directory, will also have the first element at the beginning, while bash just prints dots in that case. So
/this/…/some/silly/path
instead of
.../some/silly/path
But this might not necessarily a bad thing.
Instead of %~ you can also use %d (or your current PROMPT might already use %d). The difference is, that %d shows full absolute paths, while %~ shows shorthands for “named directories”: e.g. /home/youruser becomes ~ and /home/otheruser becomes ~otheruser. If you prefer to use the full path as basis for the shortening, just replace any occurrence of ~ with d.
In addition to the other answers given here, you can also use %< to truncate the path to a given number of characters. I find this preferable to using %<n>d, since individual path elements may obviously be quite long in themselves. Using %< yields a far more predictable maximum prompt length.
For example, to left-truncate the path element with tilde expansion (%~) to 15 characters, replacing removed characters with .., you can do something like this:
PROMPT='%n@%m:%15<..<%~%<<%# '
This is documented in the Zsh manual under Prompt Expansion, right at the end of the page.
See http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html or man zshmisc
%d
%/
Current working directory. If an integer follows the ‘%’, it specifies a number of trailing components of the current working directory to show
%~
As %d and %/, but if the current working directory starts with $HOME, that part is replaced by a ‘~’.
So to get something similar to PROMPT_DIRTRIM=3, you could use %3d or %3~, e.g.
% mkdir -p ~/a/b/c/d
% cd ~/a/b/c/d
% PS1='%n@%m: %3d%% '
user@computer: b/c/d%
You can use %3d prompt expansion:
/home/cuonglm/.config/fish/functions $ PS1='%3d $ '
.config/fish/functions $
The general form is %d, if any positive integer follow d specifies the trailing components to show of current path, zero mean show the whole path, negative integer means the leading path to show:
.config/fish/functions $ PS1='%-2d $ '
/home/cuonglm $