zsh ジョブ出力および fg アクションの構成

zsh ジョブ出力および fg アクションの構成

最近まで、私はzshのfgandコマンドがどのように機能するかに非常に満足していました。jobs

  • ただfg- >最新のバックグラウンドタスクをバックフォアグラウンドに戻します。
  • jobs->コマンド名(パラメータを含む)を表示し、PIDも表示します(記憶できません)。

最新のFedora 33アップデート以降、これらのzshの動作は(私にとって)非常に迷惑な方法で変更されました。

  • fg最も低いジョブIDを持つジョブは、前景に移動されます(つまり、最新のバックグラウンドジョブではありません)。
  • 「ジョブ」出力はより簡潔です。たとえば、次のようになります。
[3]  + suspended (signal)  mutt
[4]  - suspended

ジョブが4vimセッションの場合...

だから、いくつかのzshのデフォルト値が変更されたと仮定します。だから私の質問は:どのようにより便利な動作を整理してfg返すjobsことができますか?

(これは、jobs引数とpidでコマンド名を常に表示し、fg最新のバックグラウンドタスクを前景にインポートできることを意味します。)

(現在はzsh-5.8-3.fc33.x86_64にあります。)

編集1:セッション例:

$ zsh
~ $ man man

zsh: suspended  man man
~ $ vim blah
zsh: suspended  
~ $ jobs
[1]  - suspended  man man
[2]  + suspended  
~ $ fg
[2]  - continued  

zsh: suspended  
zsh: suspended  
~ $ jobs
[1]  + suspended  man man
[2]  - suspended

CtrlZ毎回フォアグラウンドタスクを一時停止しました。+出力でタグを見つけますjobs。また、私を驚かせたのは、zsh: suspendedvimを2回目で一時停止してから2行が出たということです。すでにhang manプロセスにhangシグナルが再送されていると思いますか?

編集2:タスク制御の問題は、タスクがvim。 vimを呼び出す方法の詳細は次のとおりです。

$ which vim
vim=__vi_internal_vim_alias
$ alias vim
vim=__vi_internal_vim_alias
$ typeset -f __vi_internal_vim_alias
__vi_internal_vim_alias () {
    (
        test -f /usr/bin/vim && exec /usr/bin/vim "$@"
        test -f /usr/bin/vi && exec /usr/bin/vi "$@"
    )
}

まあ、この定義は私のプロフィールから来たものではありません。システムの変更により発生しているようです。vimジョブ制御を呼び出すと、\vim問題は再発生しません。サブシェルがzshのコマンドライン文字列の生成やその他の操作を台無しにしたようです。また、見ることができますその他関連レポート

それでは、これはどこから来たのでしょうか?

$ cd /etc
$ grep -r __vi_internal_vim_alias . -r 2>/dev/null
./profile.d/vim.sh:__vi_internal_vim_alias()
./profile.d/vim.sh:        alias vi=__vi_internal_vim_alias
./profile.d/vim.sh:        alias vim=__vi_internal_vim_alias
./profile.d/vi.sh:__vi_internal_vim_alias()
./profile.d/vi.sh:        alias vi=__vi_internal_vim_alias
./profile.d/vi.sh:        alias vim=__vi_internal_vim_alias
$ rpm -qf ./profile.d/vim.sh 
vim-enhanced-8.2.2146-2.fc33.x86_64
$ rpm -qf ./profile.d/vi.sh 
vim-minimal-8.2.2146-2.fc33.x86_64

ベストアンサー1

これはvim、Fedoraがサブシェルでvimを起動するためにシステム全体のエイリアスを定義し始めたためです。

これはコンテンツが左右に破損しているように見えるため、これらのエイリアスはロールバックされます。https://bugzilla.redhat.com/show_bug.cgi?id=1918575

おすすめ記事