GNU/Linux >> Linux の 問題 >  >> Linux

OSに基づいてBashコマンドを実行するために1つのVimコマンドをマップする方法は?

要するに、ターミナルの単一のbashコマンドに条件を含めることができますか?もしそうなら、どのように?

現在のLaTeXドキュメントを.pdf形式で開くための次のコマンドがvimrc(システム間で共有)にあります:
map ,v :!gnome-open %<.pdf <CR> <CR>

私の質問は、OS Xマシンで家にいるときに、単に「open%<。pdf」を実行するための最良の方法は何ですか?これが私の擬似コードの推測です:

... if [$OSTYPE == "darwin*"] then open %<.pdf else gnome-open %<.pdf ...

これは、単一のBASHコマンドとして実行されます。そのような条件は可能ですか?もしそうなら、誰かが構文を手伝ってくれるでしょうか?そうでない場合、これはvimrcファイルの条件を介して実行できますか?

承認された回答:

別の方法は、OSのマップキーバインディングを正しく生成することです。例:

if executable("cmd.exe")
    map ,v :!cmd.exe /C start "" "%<.pdf"<CR><CR>
elseif $OSTYPE =~ "darwin.*"
    map ,v :!open '%<.pdf'<CR><CR>
elseif executable("gnome-open")
    map ,v :!gnome-open '%<.pdf'<CR><CR>
endif

これはテストされ、機能しているように見えますが、私のVimスクリプトは少し不安定で、適切な引用などの詳細を見逃している可能性があるため、おそらくJanderのアプローチを採用し、執筆においてはるかに優れているシェルラッパーを使用します。 。

map ,v :!open.sh '%<.pdf'<CR><CR>

そして~/bin/open.sh

#!/bin/sh

if echo "$OSTYPE" | grep "^darwin" >/dev/null 2>&1; then
    open "[email protected]" &
elif type gnome-open &>/dev/null; then
    gnome-open "[email protected]" &
fi

Linux
  1. Bash履歴コマンドの使用方法

  2. LinuxでBashの履歴をクリアする方法

  3. laravelコントローラーから外部シェルコマンドを実行するには?

  1. sudo を使用して別のユーザーとして bash サブシェルで一連のコマンドを実行するにはどうすればよいですか?

  2. Javaでsudo権限でbashコマンドを実行するには?

  3. Bash でコマンドのグループをタイムアウトする方法

  1. このSu-c「…」コマンドはどのように1つではなく2つのコマンドを渡すように見えますか?

  2. bash スクリプトを実行するには?

  3. vimエディターでコマンドを追加するには?