1

現在、私は zsh を使用しており、ディレクトリのタブ補完を使用するたびに、最後にスラッシュが追加されます。これは、スラッシュを含むディレクトリ引数を区別する rsync などのコマンドを使用するときに問題を引き起こします。そのため、タブ補完を使用するたびに、前に戻ってスラッシュを削除する必要があります。

4

1 に答える 1

-2

私のコードではありません。これはzshwikiから取得しました(リンクは現在無効です: ln -s wayback machine ) が、これを .zshrc ファイルに入れることができます。

remove-slash () {
    if [[ $LBUFFER = */ ]] && [[ $LBUFFER != *' '/ ]]; then
        LBUFFER="${LBUFFER[0,-2]} "
    else
        LBUFFER+=' '
    fi
}

no-remove-slash () {
    LBUFFER+=' '
}

zle -N remove-slash
zle -N no-remove-slash
bindkey " " remove-slash
bindkey "^x " no-remove-slash

行のためにスペースキーを押すたびbindkey " " remove-slashに、関数 remove-slash が呼び出され、カーソルの左にある文字列を操作してLBUFFER、末尾のスラッシュを削除します。

ただし、この関数呼び出しは、コマンド ラインでスペース キーを押すたびにsed s/ /_/g行われることに注意してください。たとえば、入力すると、最初のスラッシュが削除されるsed s /_/gので、という結果になります。remove-slashしたがって、もう 1 つの bindkey 行を使用すると、この状況に対処できます。Ctrl-x次にキーを押すとSpace、スラッシュが飲み込まれません。

ただし、この解決策は少しハック的であり、問​​題にいくつかの zsh オプションがあるだけかもしれませんが、当面はこれを使用してください。

このコードをいじって、その動作を確認することをお勧めします。ターミナルを開き、これらの行をプロンプトに入力して、その動作を確認してください。その特定のプロンプトで入力を入力する能力を台無しにするかもしれませんが、端末を閉じて最初からやり直すことができます:いわば何も保存されません。zle documentationも見てください。密集している場合もあります。

于 2013-06-25T22:16:09.763 に答える