私はzshに最初に触れました(昨日bashから移行しました)。
bashにはbash機能があります。
vl() { cmd=`echo $1 | sed -r 's/(.+):([0-9]+).+/\1 +\2/g'`; vim $cmd }
これはデフォルトで次のパラメータを変換します。
vl ./manifests/production/test.pp:387:foobar # A output of $grep -iHn test
到着
vim ./manifests/production/test.pp +387 #Aim is to open file at line-number 387
zshの同じ機能が期待どおりに機能しません。追加された名前のファイルを./manifests/production/test.pp +387
開く代わりに、vimで名前付きファイルを開きます。に引用符を追加するようです。./manifests/production/test.pp
+387
$cmd
誰かがここで何が起こっているのかを説明できればいいでしょう。ありがとう
ベストアンサー1
Bourneシェル、ダッシュ、ksh、bashなどの一般的なBourneスタイルのシェルでは、構文は$variable
「変数の値を取得し、IFS
その文字が現れる別の単語に分割し、各単語をファイル名ワイルドカードとして扱うことを意味します。使用して、複数のファイルのいずれかと一致する場合は拡張してください。配列の場合、variable
配列の最初の要素で発生し、他の要素は無視されます。
zshでは、構文は$variable
「変数の値を取得し、空の場合は削除」を意味します。variable
配列の場合、これは配列のすべての要素に対して発生します。 Zsh愛好家は、zshの方が優れていると思います。
$=variable
zshでは、単語の分離を実行するように書くことができます。ただし、これは現在実行中のタスクを実行する最良の方法ではありません。 bash関数はファイル名のスペースを処理せず、$=variable
zshでもスペースを使用しません。これは引数を解析する別の方法で、bashとzshの両方で機能し、:
ファイル名を除くすべての文字を処理できます。引数に2つのコロンが含まれている場合、最初のコロンの後のすべての内容は削除され、最初のコロンと2番目のコロンの間の部分はシンボルの前に別の引数として追加されます+
。コードより少し長いが、理解するのは難しくなく、ファイル名の最初の空白のヒントのために詰まらない。
vl () {
local suffix
case $1 in
*:*:*) suffix=${1#*:};; set -- "${1%%:*}" "+${suffix%%:*}";;
esac
vim "$@"
}