真夜中の司令官では、Options > Configuration > Use internal edit
が設定されていない場合、MCを押すと、Mceditではなくデフォルトのエディター(私はVimに設定しています)を使用します。 F4。それは良いことですが、Vimを終了するまでファイルマネージャがブロックされます。それを回避するために、
type/text
Open=xterm -e vim %f &
拡張ファイル(~/.config/mc/mc.ext
)そして私が押すと Enter 選択したテキストファイルで、Vimを使用して新しいターミナルで開き、MCを使用してナビゲートし続けることができます。
しかし、しばらくすると、さまざまな端末が開かれ、それぞれにファイルがあり、それらを次のように循環します AltTab 面倒になります。既存の単一のVimインスタンスの新しいタブ/バッファーですべての新しいファイルを開いて、多数のターミナルウィンドウを取得しないようにする方法はありますか?
編集:質問は当初、真夜中の司令官のみを対象としていました。現在、スコープはコマンドラインと他のファイルマネージャーにも拡張されています。
はい。ただし、最初に_vim --version | grep clientserver
_が_+clientserver
_を返すことを確認してください。 _-
_ではなく_+
_を返す場合、その機能を有効にする簡単な方法はgVimをインストールすることです。たとえば、DebianとUbuntuでは、_Sudo apt-get install vim-gtk3
_がインストールします。別の方法は、そのオプションでVimをコンパイルすることです。
_+clientserver
_を取得したので、次の内容のファイル_~/vimserver.sh
_を作成します。
_#!/bin/sh
if [ -z "$(vim --serverlist)" ]; then
x-terminal-emulator -e vim -p --servername XVIM "$@" &
else
vim --servername XVIM --remote-tab "$@"
fi
_
もちろん、それをホームフォルダに置く必要はありません。あなたのケースで最も適切なパスを選択してください。 _chmod +x ~/vimserver.sh
_で実行可能にすることを忘れないでください。また、3行目では、ターミナルマンページで、新しいターミナルウィンドウでコマンドを実行するために適切なフラグを見つけます。 XTermの場合、これは確かに_-e
_フラグですが、Gnome-terminalの場合1、Xfce4-terminalおよびTerminator。これは_-x
_フラグです。
いくつかのファイルでテストします(複数のファイルを引数で渡すことができます):
_~/vimserver.sh file1 file2
~/vimserver.sh file3 file4
_
各ファイルは、同じVimインスタンスの新しいタブで開く必要があります。新しいファイルを新しいタブではなく新しいバッファーに入れたい場合は、_--remote-tab
_を_--remote
_に変更し、_-p
_オプションを削除します。
真夜中の司令官
拡張ファイル_~/.config/mc/mc.ext
_を編集して、以下を追加します。
_type/text
Open=~/vimserver.sh %s
_
_%s
_マクロは、選択された単一のファイルだけでなく、複数のタグ付きファイルも開くことができることを意味します!
Xfe
_~/vimserver.sh
_に_Edit > Preferences > Programs > Text editor
_を入れるだけです。 Xfeは複数のタグ付きファイルを一度に開くこともできます。
Pcmanfm、Thunar、Nemo、Rox、そしておそらく他のGUIファイルマネージャ
メニューエントリのラベルは少し異なる場合がありますが、手順は同じです。
テキストファイル_Open with... > Custom command line / Use a custom command
_を右クリックします。コマンドテキストフィールドに_~/vimserver.sh
_を入力し、チェックボックスをマークするか、デフォルトとして設定するボタンを押します。
vimserver.sh
_の説明if [ -z "$(vim --serverlist)" ];
Vimサーバーがまだ存在していないかどうかをテストします。 Vimインスタンスが存在しない場合:
x-terminal-emulator -e vim -p --servername XVIM "$@" &
_新しい端末が起動され、新しいVimサーバー(名前はXVIM)が使用されます。ファイルはその新しいVimインスタンスにロードされます(複数のファイルが指定されている場合、_-p
_オプションにより、それぞれが独自のタブにあります)。特定の端末を指定できます。たとえば、_x-terminal-emulator
_の代わりにxterm
を使用できます。
else vim --servername XVIM --remote-tab "$@"
_この場合、XVIMサーバーはすでに存在しているので、ファイルを新しいタブにロードするようにXVIMに指示するだけです。
既存のサーバーでファイルが開かれている場合、DE/WMがVimでターミナルに焦点を合わせていない場合があります。 Xtermの場合、単一のxdotool
行を追加すると、次のように解決されます。
_#!/bin/sh
if [ -z "$(vim --serverlist)" ]; then
xterm -name vimserver -e vim -p --servername XVIM "$@" &
else
xdotool search --classname vimserver windowactivate
vim --servername XVIM --remote-tab "$@"
fi
_
_-name
_オプションがあるため、xdotool
はVimウィンドウを見つけてフォーカスを要求できます。私はいくつかの最新の端末(Gnome、Xfce4 ...)のマンページを読みましたが、それらには_--role
_オプションがありますが、_-name
_オプションとxdotool
がありません。役割オプションがないため、xdotool
行をそれらに適合させる方法はありません。一方、ウィンドウマネージャーは役割を認識してウィンドウに焦点を合わせることができる場合があります。たとえば、Icewmは_icesh -R rolename activate
_を提供しています。
GVimを希望または許可する場合2、_vimserver.sh
_を気にしないでください。 _gvim --remote-tab-silent
_を使用するだけです。例としてMCを使用すると、これは_~/.config/mc/mc.ext
_に入ります。
_type/text
Open=gvim --remote-tab-silent %f &
_
1 Gnome-terminalは_-x
_を優先して_--
_フラグを非推奨にしましたが、前者は引き続き機能します。
2 ユーザー@goldilocksが、gVimの使用法について クライアント/サーバーモードの実際の使用法は何ですか? の回答にコメントします。