19
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

vim の :! コマンドでも .bashrc のエイリアス設定を有効にする

Posted at

Vim でシェルのコマンドを実行したいとき、 :! の後にコマンドを打てばよいことはご存知かと思います。しかし、デフォルトのままでは .bashrc に書いてあるエイリアスの設定が有効にされていません。例えば、

.bashrc
alias ll='ls -l'

と設定していても、vim 上で :!ll は使えません( command not found となる)。

これを使えるようにするためには、適当なファイル(~/.bash_aliases としておきます)に

.bash_aliases
shopt -s expand_aliases
alias ll='ls -l'

と記述し、 .vimrc 内に

.vimrc
let $BASH_ENV = "~/.bash_aliases"

と記述しておけば大丈夫です。この状態で vim を再起動し、 :!ll を試してみましょう。動くはずです。この .bash_aliases に自分の好きなエイリアスを書いて使ってください。

参考リンク:
http://stackoverflow.com/questions/4642822/commands-executed-from-vim-are-not-recognizing-bash-command-aliases (Zahnon 氏の回答)
http://stackoverflow.com/questions/8841116/vim-not-recognizing-aliases-when-in-interactive-mode (Jacob 氏の回答)

メモ

以下、ちょっとした解説がてらのメモです。動けばそれで満足、という方は以下は読まなくても構いません。

shopt って何だ?

.bash_aliases 内 1 行目の shopt は、その名の通りシェルのオプションです。エイリアスの設定を有効にするためにこの行が必要で、普通のインタラクティブモードのシェル(ターミナル)ではデフォルトで有効になっています。vim の :! はインタラクティブではないため、明示的に設定してやる必要があります。

shellcmdflag じゃダメか?

いろいろな回答を見ていくと、「.vimrc 内に set shellcmdflag=-ic と書いておけばおk」みたいな回答がだいたい先頭に出てきます。しかし、これをしてしまうと、vim からターミナルが立ち上がってしまい、コマンド終了後に例の Press ENTER or type command to continue が出てこず、ターミナルがそのまま居座ってしまうのです。

僕はもとの :! コマンドの使用感(終了後何かキーを押せば終了)が好きでしたので、冒頭の解決策に落ち着きました。

19
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?