Vim - VimShellでプロンプト名に現在のパスを表示する
標準ではプロンプト名をパス表示にはできない(と思う)
VimShell では以下のプロンプト情報を変更できます。
- g:vimshell_prompt
- プロンプト文字列。デフォルトは「vimshell%」
- たぶん固定文字列のみ
- g:vimshell_secondary_prompt
- セカンダリプロンプト文字列。デフォルトは「%%」
- たぶん固定文字列のみ
この2つは固定文字列です。
それとは別に、上記プロンプト表示前に毎回表示させることのできるものがあります。
- g:vimshell_user_prompt
- 左側に表示
- 関数いけるっぽい
- g:vimshell_right_prompt
- 右側に表示
- 関数いけるっぽい
デフォルトのまま起動するとこうなっています。
以下の内容を.vimrcに追加して起動し直すとこうなります。
let g:vimshell_prompt = "% " let g:vimshell_secondary_prompt = "> " let g:vimshell_user_prompt = 'getcwd()' let g:vimshell_right_prompt = '"m9(^Д^)"'
g:vimshell_user_prompt
には getcwd()
を指定したので、パスを移動するたびにこの表示も変わります。
ただ、この「毎回1行何か表示される」というのがちょっとまだ慣れません。
g:vimshell_prompt
をパス表示にしたいのですが、たぶんここは固定文字列です。
ドキュメントにも特に記載はなく、ググってもg:vimshell_user_prompt
での設定しか見つからなかったのでそういうものかなと思っています。
※追記ここから
この記事出して数分と立たずにドキュメントが更新されました。 変更差分
+Q: I want to change |g:vimshell_prompt| dyanmically.
+
+A: You cannot do it. |g:vimshell_prompt| is fixed string.
+But you can change |g:vimshell_user_prompt| dynamically instead of it.
+
やはりVimShellの思想/仕様的には g:vimshell_user_prompt
使いましょうってことのようです。
※追記ここまで
hookで無理やり変えてしまう
VimShellにはhookが用意されています。
hookを利用して、毎回 g:vimshell_prompt
を書き換えてみます。
以下を.vimrcに追加します。
autocmd FileType vimshell call vimshell#hook#add('postexec', 'change_prompt', 'g:my_vimshell_change_prompt') function! g:my_vimshell_change_prompt(args, context) let g:vimshell_prompt = getcwd() . "% " call vimshell#set_highlight() endfunction
VimShellを起動した段階では初期表示のままです。
ディレクトリを移動してみます。
どうやら期待通りに動いたようです。
ユーザープロンプトの方を消して、最終的には次のような設定になります。 (好みなので消さなくてもいい)
let g:vimshell_prompt = "% " let g:vimshell_secondary_prompt = "> " autocmd FileType vimshell call vimshell#hook#add('postexec', 'change_prompt', 'g:my_vimshell_change_prompt') function! g:my_vimshell_change_prompt(args, context) let g:vimshell_prompt = getcwd() . "% " call vimshell#set_highlight() endfunction
この設定ではこのような表示になります。
注意
表示文字列とはいえグローバル変数を書き換えているわけなので、副作用が出るかもしれません。
ご利用は自己責任でお願いします。
注意(追記)
公開してから思ったところ。
ハイライトを効かせるために、毎度 vimshell#set_highlight()
読んでいますが、これのせいでsyntax定義がたくさん増えてしまうかも。
プロンプト名のハイライトが効かなくなりますが、vimshell#set_highlight()
はやめた方がいいかもしれません。
注意(追記2)
やっぱり、いろいろと弊害もあるみたいです。
http://lingr.com/room/vim/archives/2013/05/10#message-15223719