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

Vim内からシェルにアクセスしたり外部コマンドを実行したりする方法

ご存知かもしれませんが、Vimは機能満載の強力なエディターです。ここHowtoForgeでは、Vimに関するいくつかのチュートリアルを作成し、その基本的な使用法、プラグイン、およびその他の便利な機能について説明しています。しかし、Vimが提供する機能の海を考えると、私たちは常に読者と共有するのに役立つ何かを見つけます。

このチュートリアルでは、外部コマンドを実行する方法と、エディターウィンドウ内からコマンドラインシェルにアクセスする方法に焦点を当てます。

But before we start doing that, it's worth mentioning that all the examples, commands, and instructions mentioned in this tutorial have been tested on Ubuntu 14.04, and the Vim version we've used is 7.4.

Vimで外部コマンドを実行する

Vimエディタウィンドウ内から外部コマンドを実行したい場合があります。たとえば、Vimでファイルを開いて変更を加えた後、それらの変更を保存しようとすると、Vimが十分な権限がないというエラーをスローする状況を考えてみます。

これで、現在のvimセッションを終了し、十分な権限でファイルを再度開くと、行ったすべての変更が失われることになります。そのため、ほとんどの場合、オプションではないことに同意します。このような状況では、エディター内から外部コマンドを実行する機能が役立ちます。

後で上記のユースケースに戻ります(**)が、今のところ、vim内から基本的なコマンドを実行する方法を理解しましょう。

ファイルの編集中に、ファイルに含まれる行数、単語数、文字数を知りたいとします。これを行うには、Vimのコマンドモードで、コロン(:)、bang(!)、最後にコマンド(この場合は'wc')、ファイル名(現在のファイルには%を使用)を入力します。

:! wc %

次に例を示します:

前述のコマンドを実行する準備ができているファイル:

ターミナルでの出力は次のとおりです。

出力の表示が終了したら、Enterキーを押すと、Vimセッションに戻ります。

この機能は、たとえば、コードやスクリプトを作成していて、コード/スクリプトにコンパイル時や構文エラーが含まれているかどうかをすばやく知りたい場合に非常に便利です。

次に、出力をファイルに追加する必要がある場合は、「:read!」を使用します。指図。次に例を示します:

:read ! wc %

'read'コマンドは、編集中のファイルの現在の行の下の新しい行に外部コマンドの出力を挿入します。必要に応じて、特定の行番号を指定することもできます。出力はその特定の行の後に追加されます。

たとえば、次のコマンドは、ファイルの2行目の後に「wc」の出力を追加します。

:2read ! wc %

「$」を使用して最後の行の後に挿入し、「0」を使用して最初の行の前に挿入します。

ここで、最初に説明したユースケース(**)に戻ります。これは、最初にファイルを閉じずに(つまり、保存されていない変更が失われないように)ファイルを保存してから、次のように開くのに役立つコマンドです。 、sudo。

:w ! sudo tee %

Vimのアクセスシェル

個々のコマンドを実行するだけでなく、Vim内から新しく起動したシェルに自分自身をドロップすることもできます。このために必要なのは、エディターから次のコマンドを実行することだけです。

:shell

または

:sh

シェルの作業が終わったら「exit」と入力します。これにより、最初に離れた場所からVimセッションに戻ります。

覚えておくべき抜け穴

シェルにアクセスする機能は、現実の世界では確かに独自の用途がありますが、特権昇格の手法としても使用できます。以前のチュートリアル(sudoedit)の1つで説明したように、Vimを介して1つのファイルのみを編集するためのユーザーsudoアクセスを提供した場合でも、ユーザーはこの手法を使用してエディター内から新しいシェルを起動できます。 'root'またはスーパーユーザーとして何かをする。

Vim内から外部コマンドを実行する機能は、多くの状況で役立つ重要な機能です(このチュートリアルで説明したものもあります)。この機能の学習曲線は急ではないため、初心者と経験豊富なユーザーの両方がこの機能を利用できます。

この機能をかなり前から使用していますか?共有するものはありますか?以下のコメントにあなたの考えを残してください。


Linux
  1. Linux でファイル アクセスを監査する方法

  2. ファイルまたはディレクトリが変更されたときにシェルスクリプトを実行する方法は?

  3. Bash シェル スクリプト内から Vim を開く

  1. 別のshファイルからshファイルを実行する方法

  2. シェルから Vim コマンドを実行するには?

  3. ファイルへのアクセスが Tomcat によって提供されないようにブロックするには?

  1. シェルコマンドを使用してASCIIファイルの最初のN行を削除するにはどうすればよいですか?

  2. ストリーミングWebサイトからFlashファイルにアクセスする方法は?

  3. シェルからPythonスクリプトを実行する方法