Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

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が出てこず、ターミナルがそのまま居座ってしまうのです。

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>