天道酬勤,学无止境

zsh 中的多点路径,如 `cd ...`(Multi-dot paths in zsh, like `cd …`)

问题

所有 shell 都理解这些命令:

$ cd .
$ cd ..

而 zsh 也会明白:

$ cd ...
$ cd ....

只要你说:

$ alias -g ...='../..'
$ alias -g ....='../../..'

现在,当我开始输入cd ..../<TAB>时,如何让它正确完成cd ..../<TAB> ? 我记得它是在 oh-my-zsh 中实现的,但我现在已经停止使用它了。

如果它不仅适用于cd ,也将不胜感激,比如说我想执行cat ..../a/b/..../c/d | less cat ..../a/b/..../c/d | less

回答1

我对其他答案不满意,所以我花了一些时间来获得更多我喜欢的东西。 当您按 (回车)或 (制表符)时,以下内容将扩展圆点,而不是在您输入圆点时。

function expand-dots() {
    local MATCH
    if [[ $LBUFFER =~ '\.\.\.+' ]]; then
        LBUFFER=$LBUFFER:fs%\.\.\.%../..%
    fi
}

function expand-dots-then-expand-or-complete() {
    zle expand-dots
    zle expand-or-complete
}

function expand-dots-then-accept-line() {
    zle expand-dots
    zle accept-line
}

zle -N expand-dots
zle -N expand-dots-then-expand-or-complete
zle -N expand-dots-then-accept-line
bindkey '^I' expand-dots-then-expand-or-complete
bindkey '^M' expand-dots-then-accept-line
回答2

我为处理同样的问题所做的就是让 zsh 在我输入时填写../.. ...并且以这种方式扩展它是有意义的。 它可能适合您(或不适合:-P):

if is-at-least 5.0.0 && [[ ! $UID -eq 0 ]]; then                                                                                                                             
  ## http://www.zsh.org/mla/users/2010/msg00769.html                                                                                                                       
  function rationalise-dot() {                                                                                                                                             
    local MATCH # keep the regex match from leaking to the environment                                                                                                   
    if [[ $LBUFFER =~ '(^|/| |      |'$'\n''|\||;|&)\.\.$' && ! $LBUFFER = p4* ]]; then                                                                                  
        #if [[ ! $LBUFFER = p4* && $LBUFFER = *.. ]]; then                                                                                                               
        LBUFFER+=/..                                                                                                                                                     
    else                                                                                                                                                                 
        zle self-insert                                                                                                                                                  
    fi                                                                                                                                                                   
}                                                                                                                                                                        
zle -N rationalise-dot                                                                                                                                                   
bindkey . rationalise-dot                                                                                                                                                
bindkey -M isearch . self-insert                                                                                                                                         
fi

我也有一个别名... ,但它不是全球性的。

请注意,我检查命令行是否以p4 (Perforce 命令行工具)开头,并且在这种情况下不要混淆它,因为 Perforce 参数通常涉及文字... 。 如果您不使用p4您显然可以删除该检查。

回答3

一个不错的选择是 manydots-magic,它将...扩展为../..等,但它很聪明。 有关更多详细信息,请参阅上面的链接,但简要说明:

  • 它允许您使用单个退格键恢复扩展(如果这是您最后输入的内容)。
    • 但它不会恢复显式输入的../..
  • 您可以内联使用它,例如cd a/b/..../y/z
  • 尽管如此,当它没有意义时它不会扩展,例如git log branch...
  • 在可能有意义时扩展,但在您输入更多时恢复。 例如
    • git diff ... -> git diff ../..
    • git diff ...b -> git diff ...b (用于git diff ...branch
回答4

您必须使用compinit并使用_expand_alias作为完成者。 下面是一个例子:

zstyle ':completion:*' completer _complete _ignored _expand_alias
autoload -Uz compinit
compinit

_complete _ignored的默认设置为completer ,您可以将其设置为只_expand_alias但随后完成将只为别名工作。

如果您的~/.zshrc compinit中已经配置了compinit ,那么您只需要将_expand_alias添加到completer的列表中,例如:

zstyle ':completion:*' completer _expand _complete _ignored _approximate _expand_alias

默认情况下_expand_alias扩展全局和常规别名,如果您不想扩展常规别名,请设置:

zstyle ':completion:*' regular false

注意:这当然仅适用于全局别名可以工作的情况。 所以它们不会像a/b/..../c/d那样被扩展为整个路径的一部分

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Multi-dot paths in zsh, like `cd …`
    All shells understand these commands: $ cd . $ cd .. And zsh will also understand: $ cd ... $ cd .... Provided you say: $ alias -g ...='../..' $ alias -g ....='../../..' Now, how can I make it do proper tab-completion when I've started typing cd ..../<TAB>? I recall it was implemented in oh-my-zsh but I've stopped using it now. It would also be appreciated if it would work not only for cd, say I want to execute cat ..../a/b/..../c/d | less.
  • 如何在POSIX sh中获取脚本目录?(How to get script directory in POSIX sh?)
    问题 我的bash脚本中有以下代码。 现在我想在POSIX sh中使用它。 如何转换? DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )" 回答1 $BASH_SOURCE的POSIX-shell( sh )对应$BASH_SOURCE是$0 。 请参阅底部的背景信息 注意:关键区别在于,如果源代码是脚本的源代码(使用.加载到当前shell中) ,则下面的代码片段将无法正常工作。 下面进一步解释 请注意,在以下代码段中,我已将DIR更改为dir ,因为最好不要使用全大写的变量名,以避免与环境变量和特殊的shell变量发生冲突。 在CDPATH=前缀需要的地方> /dev/null在原来的命令: $CDPATH设置为空字符串,以保证cd从来没有任何回音。 在最简单的情况下,可以这样做(相当于OP的command ): dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) 如果在目录和/或其组件为符号链接的情况下,如果还要将最终目录路径解析为其最终目标,请在pwd命令中添加-P : dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P) 警告:这是不一样的发现脚本自身起源的真正目录: 假设您的脚本foo在
  • 如何通过Shell(BASH / ZSH / SH)获取文件的绝对路径?(How to obtain the absolute path of a file via Shell (BASH/ZSH/SH)?)
    问题 问题:是否有一个简单的sh / bash / zsh / fish / ...命令来打印我提供的文件的绝对路径? 用例:我在目录/a/b ,我想在命令行上打印文件c的完整路径,以便可以轻松地将其粘贴到另一个程序/a/b/c 。 一个简单的小程序就可以在处理长路径时为我节省5秒钟左右的时间,最终这些结果加起来了。 因此,令我惊讶的是我找不到标准的实用程序来执行此操作-真的没有吗? 这是一个示例实现abspath.py: #!/usr/bin/python # Author: Diggory Hardy <diggory.hardy@gmail.com> # Licence: public domain # Purpose: print the absolute path of all input paths import sys import os.path if len(sys.argv)>1: for i in range(1,len(sys.argv)): print os.path.abspath( sys.argv[i] ) sys.exit(0) else: print >> sys.stderr, "Usage: ",sys.argv[0]," PATH." sys.exit(1) 回答1 使用真实路径 $ realpath example.txt /home
  • 如何将Git存储库克隆到特定文件夹中?(How do you clone a Git repository into a specific folder?)
    问题 执行命令git clone git@github.com:whatever在我命名为当前文件夹中创建一个目录whatever ,并丢弃Git仓库到该文件夹的内容: /httpdocs/whatever/public 我的问题是我需要将Git存储库的内容克隆到当前目录中,以便它们出现在Web服务器的正确位置: /httpdocs/public 克隆存储库后,我知道如何移动文件,但这似乎破坏了Git,我希望能够仅通过调用git pull来进行更新。 我怎样才能做到这一点? 回答1 选项A: git clone git@github.com:whatever folder-name Ergo,在right here使用: git clone git@github.com:whatever . 选项B: 也移动.git文件夹。 请注意, .git文件夹在大多数图形文件浏览器中都是隐藏的,因此请确保显示隐藏的文件。 mv /where/it/is/right/now/* /where/I/want/it/ mv /where/it/is/right/now/.* /where/I/want/it/ 第一行抓取所有普通文件,第二行抓取点文件。 也可以通过启用dotglob(即shopt -s dotglob )在一行中完成此操作,但是如果您问这个答案所回答的问题
  • Arch-007ArchLinux配置zsh-shell和powerlevel9k主题
    安装这个软件可以产生如下效果 1.安装zsh yay -Sy zsh 2.安装oh-my-zsh sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 3.切换默认shell为zsh chsh -s /bin/zsh 4:安装zsh命令自动补全插件 git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/plugins/zsh-autosuggestions 5:安装高亮彩色显示插件 git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/plugins/zsh-syntax-highlighting 6:安装powerlevel9k主题 git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k 7:安装字体图标 yay -Sy awesome-terminal-fonts 8:将下面的文本复制进~/.zshrc里面 但是在复制之前 需要将第6行中的
  • bsh脚本获取脚本目录的zsh等效项是什么?(What is the zsh equivalent of a bash script getting the script's directory?)
    问题 我想将这个bash脚本介绍为zsh脚本。 因此,我对此没有经验,希望可以在这里获得帮助: bash脚本: SCRIPT_PATH="${BASH_SOURCE[0]}"; if([ -h "${SCRIPT_PATH}" ]) then while([ -h "${SCRIPT_PATH}" ]) do SCRIPT_PATH=`readlink "${SCRIPT_PATH}"`; done fi pushd . > /dev/null cd `dirname ${SCRIPT_PATH}` > /dev/null SCRIPT_PATH=`pwd`; popd > /dev/null 我已经知道我可以使用SCRIPT_PATH="$0"; 获取脚本所在的路径。 但是随后我在“ readlink”语句中遇到了错误。 谢谢你的帮助 回答1 除了BASH_SOURCE我看不到您需要进行任何更改。 但是脚本的目的是什么? 如果要获取目录,则脚本位于${0:A:h} ( :A将解析所有符号链接, :h将截断最后一个路径组件,并为您保留目录名称): SCRIPT_PATH="${0:A:h}" 就这样。 请注意,原始脚本会发生一些奇怪的事情: if(…)和while(…)在子外壳中启动… 。 您不需要在这里使用subshel​​l,使用if …和while …进行这些检查会更快。
  • Mac安装zsh小总结
    楓尘君不用不知道,原来Mac用zsh+iterm2竟然是如此的好用,丝丝顺滑,再用苹果的终端已然索然无味。 下面废话不多说,搞起来: 注:有多种安装zsh的方法,使用使用 brew或者wget等等,本文主要介绍git方式手动安装,毕竟手动才会有更大乐趣不是~ 1.git手动安装: git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh 2.如果你已存在~/.zshrc文件,则备份现有zshrc文件(以防万一,备用) cp ~/.zshrc ~/.zshrc.orig 3.创建一个新的zsh配置文件(以防万一,备用) cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc 4.改变默认的Shell chsh -s /bin/zsh 注:将ZSH设置为默认的shell(bash切换为zsh) chsh -s /bin/zsh 如果要切换回去: chsh -s /bin/bash 5.将bash(之前系统默认)的环境变量转移到zsh上 为什么要转移: 安装zsh后,默认情况下就不会自动读取~/.bash_profile了。而是运行在用户目录下应该有.oh-my-zsh目录,和.zshrc配置文件。在zsh中按照上面的流程 只能设置临时的环境变量,如果退出终端
  • 找不到gcloud命令-在安装Google Cloud SDK时(gcloud command not found - while installing Google Cloud SDK)
    问题 我在Mac上,尝试在终端中使用此命令安装Google Cloud SDK(包括gcloud命令行实用程序) curl https://sdk.cloud.google.com | bash 如https://cloud.google.com/sdk/ 它一直运行到最后并完成,但是即使在我重新启动外壳程序之后, gcloud命令仍然表示未找到它。 为什么此安装无法正常工作? 回答1 因此,以下是我先前针对此问题的解决方案,但事实证明它不是永久的。 它可以工作,但是每次重新启动Terminal时,您都必须做同样的事情,这是不实际的。 因此,这就是为什么我建议您删除当前的google-cloud-sdk目录,然后仅重做安装的原因。 确保(如Zachary所述)对“ Modify profile to update your $PATH and enable bash completion? (Y/n) ”提示回答是(Y) Modify profile to update your $PATH and enable bash completion? (Y/n) Modify profile to update your $PATH and enable bash completion? (Y/n) 。 这是我的旧答案,但是只需重做安装即可: 我遇到了同样的问题,
  • 找不到Flutter命令(Flutter command not found)
    问题 bash: flutter: command not found 显然,所有flutter命令都无法在android studio的终端上运行,我相信我正在尝试在项目的根目录下运行它。 回答1 您需要正确设置颤振路径。 从这里https://flutter.dev/docs/get-started/install/macos#update-your-path 确定放置Flutter SDK的目录。 您将在第3步中使用此功能。 打开(或创建) $HOME/.bash_profile 。 您可以通过使用终端文本编辑器来做到这一点,方法是进入终端并输入nano ~/.bash_profile macOS Catalina默认情况下使用Z Shell,因此编辑$ HOME / .zshrc。 如果使用其他Shell,则计算机上的文件路径和文件名将不同。 添加以下行,并将[PATH_TO_FLUTTER_GIT_DIRECTORY]更改为克隆Flutter的git repo的路径: export PATH=[PATH_TO_FLUTTER_GIT_DIRECTORY]/flutter/bin:$PATH 例如: export PATH=~/Documents/flutter/bin:$PATH 按CTRL X ,当它要求您保存文件时,选择“是”。 运行source $HOME/
  • 如何检测脚本是否源(How to detect if a script is being sourced)
    问题 我有一个脚本,如果它是源代码,我不希望它调用exit 。 我考虑过检查$0 == bash但是如果脚本是从另一个脚本中获取的,或者用户是从另一个类似ksh外壳中获取的,这就会出现问题。 有没有可靠的方法来检测脚本是否源? 回答1 这似乎可以在Bash和Korn之间移植: [[ $_ != $0 ]] && echo "Script is being sourced" || echo "Script is a subshell" 与此类似的行或类似pathname="$_"的赋值(带有稍后的测试和操作)必须位于脚本的第一行或shebang之后的行中(如果使用的话,应用于ksh in)以便在大多数情况下都可以正常工作)。 回答2 如果您的Bash版本知道BASH_SOURCE数组变量,请尝试以下操作: # man bash | less -p BASH_SOURCE #[[ ${BASH_VERSINFO[0]} -le 2 ]] && echo 'No BASH_SOURCE array variable' && exit 1 [[ "${BASH_SOURCE[0]}" != "${0}" ]] && echo "script ${BASH_SOURCE[0]} is being sourced ..." 回答3 针对bash , ksh , zsh可靠解决方案
  • Zsh:找不到Conda / Pip installs命令(Zsh: Conda/Pip installs command not found)
    问题 因此,我安装了Anaconda ,一切正常。 安装后,我决定切换到oh-my-zsh 。 我现在得到: zsh: command not found: conda 尝试使用pip或conda安装时 echo $ZSH_VERSION 5.0.5 我已经添加到我的zshenv.sh export PATH ="/Users/Dz/anaconda/bin:$PATH" 我想念的是什么? 回答1 我找到了一种简单的方法。 您可以尝试对其进行测试。 只需按照我显示的以下步骤操作即可: 首先,在终端中输入 vim ~/.zshrc 添加 source ~/.bash_profile 进入.zshrc文件 然后在终端中输入 source ~/.zshrc 恭喜你 回答2 如果您使用的是macOS Catalina,则新的默认外壳为zsh。 您将需要运行source / bin / activate,然后运行conda init zsh。 例如:我安装了anaconda python 3.7版本,键入echo $USER查找用户名。 source /Users/my_username/opt/anaconda3/bin/activate 遵从 conda init zsh 或(用于bash shell) conda init 检查工作: conda list 该错误将得到解决。 回答3
  • MAC终端神器iterm2——告别黑白
    <div class="oneLevelTitle">最终效果:</div> ![](https://img2018.cnblogs.com/blog/1414709/201809/1414709-20180924160212667-1542960513.png)<div class="oneLevelTitle">实现步骤</div> ### 1. 下载iTerm2 官网下载:https://www.iterm2.com/安装完成后,在/bin目录下会多出一个zsh的文件。Mac系统默认使用dash作为终端,可以使用命令修改默认使用zsh:chsh -s /bin/zshzsh完美代替bash,具体区别可查看:<a href="https://www.xshell.net/shell/bash_zsh.html" target="_blank">《Zsh和Bash区别》</a><b>iterm2的原始界面</b>2. 替换背景图片打开路径:iterm2 -> Preferences -> Profiles -> window -> Background Image选择一张自己喜欢的壁纸即可可以通过Blending调节壁纸的透明度: 透明度为0的时候,背景变为纯色(黑色)我个人比较喜欢扁平化的壁纸,喜欢的朋友可以来这里看看: <a href="https://www.zhihu
  • 如何从脚本本身中获取Bash脚本的源目录?(How can I get the source directory of a Bash script from within the script itself?)
    问题 我如何获取该脚本内Bash脚本所在目录的路径? 我想将Bash脚本用作另一个应用程序的启动器。 我想将工作目录更改为Bash脚本所在的目录,以便可以对该目录中的文件进行操作,如下所示: $ ./application 回答1 #!/bin/bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 是有用的单行代码,无论从何处调用脚本,它都将为您提供脚本的完整目录名称。 只要用于查找脚本的路径的最后一个组成部分不是符号链接(目录链接都可以),它将起作用。 如果您还想解析到脚本本身的任何链接,则需要一个多行解决方案: #!/bin/bash SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )" SOURCE="$(readlink "$SOURCE")" [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative
  • 在Mac OS X上设置ADB(Set up adb on Mac OS X)
    问题 我花了很多时间弄清楚如何在Mac上设置adb,因此我想写如何设置它对某些人可能有用。 adb是用于在手机/模拟器上安装和运行android应用程序的命令行工具 回答1 注意:这最初是在macOS上安装ADB上编写的,但该问题已作为与此问题的重复而关闭。 zsh用户注意事项:将所有对~/.bash_profile引用替换为~/.zshrc 。 选项1-使用自制程序 这是最简单的方法,它将提供自动更新。 安装自制软件 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 安装adb brew install android-platform-tools 开始使用adb adb devices 选项2-手动(仅平台工具) 这是手动安装ADB和Fastboot的最简单方法。 删除旧安装(可选) rm -rf ~/.android-sdk-macosx/ 导航到https://developer.android.com/studio/releases/platform-tools.html,然后单击SDK Platform-Tools for Mac的SDK Platform-Tools for Mac链接。 转到您的下载文件夹 cd ~
  • Linux下zsh(Z shell)
    文章目录 什么是zshzsh有什么用zsh安装和切换Oh-My-Zsh 什么是zsh Z shell是一个Linux用户很少使用的power-shell,这是由于大多数Linux产品安装,以及默认使用bash shell。几乎每一款Linux产品都包含有zsh,通常可以用apt-get、urpmi或yum进行安装。 Z shell(zsh[1])是 Linux 和类 Unix 系统中的一个命令解析器[2]。 它跟 sh (Bourne shell) 家族的其它解析器(如 bash 和 ksh)有着相似的特点,但它还提供了大量的高级特性以及强大的命令行编辑功能,如增强版 Tab 补全。 centos7默认情况下没安装zsh。 zsh有什么用 什么是ZSH,为什么要使用它而不是Bash? 参考URL:http://www.howtoip.com/what-is-zsh-and-why-should-you-use-it-instead-of-bash/ 自动cd:只需输入目录的名称即可递归路径扩展:例如“/ u / lo / b”扩展为“/ usr / local / bin”拼写更正和近似完成:如果您输入目录名称时出现轻微错误,ZSH将为您解决此问题插件和主题支持: ZSH包含许多不同的插件框架 总结: 一般默认shell完全够用,看你个人需求决定是否使用zsh。 zsh安装和切换
  • 第一个zsh脚本
    前言 最近工作环境的shell不是换了zsh吗。然后也想着试着简单了解与实践一下zsh脚本,刚好自己有一个提高工作效率的脚本需求,所以就花点时间看了下zsh的文档然后小试牛刀了一把。体验如网友 “陌辞寒”的文章Zsh 开发指南(第一篇 变量和语句)所提的,第一,网上写zsh编程的文章很少;第二,官网的文档对初学有一定的门坎。所以呢推荐大家可以先通过 “陌辞寒 的zsh教程去入门。然后继续深入浅出的话还是得深挖官方文档与在实践中提高了吧 需求 开发与维护的项目越来越多,本地git仓库的目录也是越来越多,然后有个想法是写个脚本,遍历当前工作目录下的所有目录并拉取远端的仓库代码的更新。 如上一个很简单需求,但其它基本会涉及到zsh脚本中的变量定义与使用,目录的获取与遍历,命令行的调用等。算是一个zsh的入门级脚本了吧 实现 #!/usr/bin/env zsh local files=($(print -l */)) for f ($files) { print "cd $f and git fetch --all" cd $f git pull cd .. print "cd .." } 将如下代码放在,如git_fetch.zsh中,然后需要赋于可执行权限(chmod + x git_fetch.sh),在目标目录下运行(./git_fetch.sh) 参考 zsh开发指南 ZSH
  • 在zsh上找不到命令(commands not found on zsh)
    问题 我使用的是z Shell( zsh )而不是默认的bash,并且发生了一些错误,因此不再能识别所有曾经工作的命令: ls zsh: command not found: ls open -e .zshrc zsh: correct 'open' to '_open' [nyae]? 我不知道如何重置zsh或如何解决此问题。 这是$PATH变量的内容: echo $PATH /Users/Malloc/bin/Sencha/Cmd/3.1.2.342:/usr/local/bin/mate 我无法打开.bash_profile文件或.zshrc文件,似乎唯一的解决方案是重置zsh 。 有任何想法吗? 编辑: 我什至尝试按照此线程中的指示重置zsh ,但始终command not found错误: exec zsh zsh: command not found: zsh 发生什么了? 为什么所有命令都丢失了? 回答1 显然,您已经设法弄乱了PATH变量。 (您当前的PATH不包含通用实用程序所在的任何位置。) 尝试: PATH=/bin:/usr/bin:/usr/local/bin:${PATH} export PATH 另外,对于“重置” zsh,请指定shell的完整路径: exec /bin/zsh 或者 exec /usr/bin/zsh 回答2 在〜/
  • ITerm2配置(三四尚未完成)
    让mac命令行更加丰富高效 前置 安装brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 来源:链接 一.ITerm2简介 1.安装 iTerm2 是一款完全免费的,专为 Mac OS 用户打造的命令行应用。直接在官网上http://iterm2.com/ 下载并安装即可。 2.配置 设置ITerm为默认终端 二.安装 oh-my-zsh 1.查看系统有几个shell cat /etc/shells 回显是这个 /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh bash是mac中terminal自带的shell,把它换成zsh,这个的功能要多得多。拥有语法高亮,命令行tab补全,自动提示符,显示Git仓库状态等功能。 使用下面命令设置默认shell chsh -s /bin/zsh 2.安装oh-my-zsh github地址:https://github.com/robbyrussell/oh-my-zsh 使用 crul 安装: sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools
  • 您如何合并两个Git存储库?(How do you merge two Git repositories?)
    问题 请考虑以下情形: 我已经在自己的Git仓库中开发了一个小型实验项目A。 它现在已经成熟,我希望A成为较大项目B的一部分,该项目B具有自己的大型存储库。 我现在想将A添加为B的子目录。 如何将A合并为B,而又不会丢失任何历史记录? 回答1 可以轻松地将另一个存储库的单个分支放置在保留其历史记录的子目录下。 例如: git subtree add --prefix=rails git://github.com/rails/rails.git master 这将显示为一次提交,其中Rails master分支的所有文件都添加到“ rails”目录中。 但是,提交的标题包含对旧历史树的引用: 从提交<rev>添加'rails /' 其中<rev>是SHA-1提交哈希。 您仍然可以看到历史,怪一些变化。 git log <rev> git blame <rev> -- README.md 请注意,您无法从此处看到目录前缀,因为这是一个完整的实际旧分支。 您应该像对待普通的文件移动提交一样对待它:到达它时,您将需要一个额外的跳转。 # finishes with all files added at once commit git log rails/README.md # then continue from original tree git log <rev> -- README
  • zsh compinit:不安全的目录(zsh compinit: insecure directories)
    问题 这是什么意思,我该如何解决? zsh compinit: insecure directories, run compaudit for list. Ignore insecure directories and continue [y] or abort compinit [n]? 运行compaudit将返回以下内容: There are insecure directories: /usr/local/share/zsh/site-functions 回答1 这为我解决了: $ sudo chmod -R 755 /usr/local/share/zsh/site-functions 信用:zsh邮件列表上的帖子 编辑:正如@biocyberman在评论中指出的。 您可能还需要更新site-functions的所有者: $ sudo chown -R root:root /usr/local/share/zsh/site-functions 在我的机器(OSX 10.9)上,我不需要这样做,但是需要YMMV。 EDIT2:在OSX 10.11上,仅此有效: $ sudo chmod -R 755 /usr/local/share/zsh $ sudo chown -R root:staff /usr/local/share/zsh 另外,user