缩短我在Zsh中的提示

时间:2016-05-17 22:04:05

标签: shell terminal zsh zshrc oh-my-zsh

我在使用zsh缩短提示时遇到了很多麻烦。我目前正在使用zsh和agnoster主题以及oh-my-zsh包管理器。

我的提示目前在工作期间变得非常烦人,通常大约110个字符,占据了我的终端的整个长度,这不是很美观。

我已经看过其他几个人的.zshrc并尝试修改他们的提示,但似乎没有任何工作可行。我曾尝试将很多很多东西复制到我的.zshrc中并且看不到任何影响。

我最近的尝试是尝试从https://stackoverflow.com/a/171564/2416097

复制提示栏

无。即使我在包含此块时禁用了我的主题,提示仍然是全长的。

此外,我似乎无法找到关于如何格式化我的提示的任何简单或直接的指南。我在搜索时发现的大多数结果只产生了长格式字符串而没有使用说明或说明。

任何帮助表示赞赏!

4 个答案:

答案 0 :(得分:12)

老问题,我知道,但作为替代解决方案,我刚刚发现了powerlevel9k,agnoster的扩展(它们看起来几乎完全相同,只有很少的调整),内置了这个功能。

将其设置为zsh主题,然后设置为.zshrc set

POWERLEVEL9K_SHORTEN_DIR_LENGTH=2

确保只列出两个目录。

自述文件中列出了替代选项。

答案 1 :(得分:10)

首先,您必须将主题复制到另一个主题中,以便根据自己的喜好自定义主题。

  • animateToCamera:animationDuration:复制到例如agnoster.zsh-theme并在mytheme.zsh-theme
  • 中选择它
  • 然后根据自己的喜好修改主题

我查看了 agnoster theme并找到了一个可以节省空间的地方。

.zshrc

可以更改为

prompt_dir() {
    prompt_segment blue $PRIMARY_FG ' %~ '
}

这会将您的路径截断为25个字符,并使用prompt_dir() { prompt_segment blue $PRIMARY_FG ' %25<...<%~%<< ' } 替换更多字符 zsh手册(下面链接)中描述了它的工作原理。

简短说明是:

  • ...会将超过25个字符的所有内容截断为%25<...<
  • ...基本上会告诉zsh此后的任何内容都不应被截断(将截断限制为路径部分)

我留给你找到更多可以节省空间的地方。

要获得更多自定义需求,请查看zsh: 13 Prompt Expansion

答案 2 :(得分:3)

将此添加到~/.zshrc

prompt_dir() {
  prompt_segment blue $CURRENT_FG '%2~'
}

解释性注释:%<N>~将把通向当前目录的路径段的数量限制为N。 %2~仅显示最后两个段:当前目录及其父目录。

答案 3 :(得分:2)

在Zsh主题文件夹中,您应该搜索此文件#include <signal.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> void handler(int signo) { printf("I'm in the handler with SIGNAL %d!", signo); exit(0); } void *thread(void *argument) { // Hardcoding to "myuser@myhost.com" here for sake of example, but you // could image the host is different per thread FILE *file = popen("ssh myuser@myhost.com \"tail -f /path/to/some/log.log\"", "r"); if (file == null) { printf("Error opening file\n"); exit(1); } char line[2048]; while (fgets(line, sizeof(line), fp) != NULL) { printf("%s\n", line); } return NULL; } int main(void) { // Block the SIGINT signal. The threads will inherit the signal mask. // This will avoid them catching SIGINT instead of this thread. sigset_t sigset, oldset; sigemptyset(&sigset); sigaddset(&sigset, SIGINT); pthread_sigmask(SIG_BLOCK, &sigset, &oldset); // Spawn the two threads. pthread_t thread1, thread2; pthread_create(&thread1, NULL, thread, &(unsigned int){1}); pthread_create(&thread2, NULL, thread, &(unsigned int){2}); // Install the signal handler for SIGINT. struct sigaction s; s.sa_handler = handler; sigemptyset(&s.sa_mask); s.sa_flags = 0; sigaction(SIGINT, &s, NULL); // Restore the old signal mask only for this thread. pthread_sigmask(SIG_SETMASK, &oldset, NULL); // Wait for SIGINT to arrive. pause(); // Cancel both threads. pthread_cancel(thread1); pthread_cancel(thread2); // Join both threads. pthread_join(thread1, NULL); pthread_join(thread2, NULL); // Done. puts("Terminated."); return EXIT_SUCCESS; } ,用编辑器打开并更改这段代码:

agnoster.zsh-theme

与此:

prompt_dir() {
    prompt_segment blue $CURRENT_FG ' %~ '
}

这将提示当前目录,而不是完整路径。