質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Linux

    4290questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Node.js

    2232questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • Vim

    558questions

    VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

vimプラグインのquickrunでnodejsが実行できない

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,463

morikz

score 63

vimプラグインのquickrunでnodejsが実行できなくて困っています。

node.jsの実行したいファイル名は「server.js」です。
quickrunはファイルの拡張しから実行するべき処理系を自動で識別するそうですが、.js拡張子のファイルは標準ではjavascriptが実行される様になっているそうです。
なのでNodeの実行ファイルであるnodeコマンドを代わりに使用するために
.vimrcファイルの設定には以下のように書いてあります。
(コマンドラインでnodeコマンドを打てば実行できるのでPATHは通っているとと思います)
 let g:quickrun_config = {
 \ "javascript": {
 \   "command": "node",
 \   "tempfile": "{tempname()}.js"
 \   }
 \ }
この設定でバッファを開いて「\r」で実行するのですが、全く反応がありません。
ちなみに、phpファイルや純粋なjavascriptファイルのquickrun実行はできます。 

quickrunをnode.jsで実行する方法を教えて下さい。

追加でquickrunで実行するserver.jsと.vimrcのすべてのソースを追記します。
//server.js
var http = require('http');
 
var server = http.createServer();
server.on('request', doRequest);
server.listen(process.env.PORT, process.env.IP);
console.log('Server running!');
 
// リクエストの処理
function doRequest(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World\n');
res.end();
}

" .vimrc
" 表示設定
set number "行番号を表示する
set title "編集中のファイル名を表示
set showmatch "括弧入力時の対応する括弧を表示
syntax on "コードの色分け
set tabstop=4 "インデントをスペース4つ分に設定
set smartindent "オートインデント

" 行番号の色を設定
hi LineNr ctermbg=none ctermfg=8
hi CursorLineNr ctermbg=10 ctermfg=255
set cursorline
hi clear CursorLine

" 検索設定
set ignorecase "大文字/小文字の区別なく検索する
set smartcase "検索文字列に大文字が含まれている場合は区別して検索する
set wrapscan "検索時に最後まで行ったら最初に戻る
"
"
"---------------------------
" Start Neobundle Settings.
"---------------------------
" bundleで管理するディレクトリを指定
set runtimepath+=~/.vim/bundle/neobundle.vim/
"
" Required:
call neobundle#begin(expand('~/.vim/bundle/'))
"
NeoBundleFetch 'Shougo/neobundle.vim'
" quickrumを設定
NeoBundle 'thinca/vim-quickrun'
 let g:quickrun_config = {
  \ "node": {
  \   "command": "node",
  \   "tempfile": "{tempname()}.js"
  \   }
  \ }
"
" autocloseを設定
NeoBundle 'Townk/vim-autoclose'
"
call neobundle#end()
"
" Required:
filetype plugin indent on
"
NeoBundleCheck
" -------------------------
" End Neobundle Settings.
" ------------------------- "

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi
# User specific aliases and functions
export PATH=$HOME/.nodebrew/current/bin:$PATH
nodejsとphpをQuickRunした時の画面結果を2枚ずつ載せます
イメージ説明イメージ説明イメージ説明イメージ説明ご覧の通りnodeでは動きませんが、phpだと動くのがわかると思います。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • thinca

    2015/12/02 19:27

    server.js はどのような動作をするプログラムでしょうか?
    可能であればソースコードを提示してもらえると問題の原因がわかるかもしれません。

    キャンセル

  • morikz

    2015/12/02 20:40

    回答ありがとうございます。
    server.jsと.vimrcのすべてのコードを追加いたしました。
    よろしくお願いいたします。

    キャンセル

回答 3

checkベストアンサー

+3

まず、server.js はサーバを起動するプログラムですので、:QuickRun 実行後に変化がないのは正常です。
本来このような常駐するプログラムは quickrun.vim での利用に向いていませんが、ここではその点については置いておきます。
server.js ではポート番号として環境変数 PORT を参照しているようですので、プログラムを実行する前に環境変数 PORT が正しく設定されているか確認してください。
Vim 内からは以下のように設定します。

let $PORT = 8000

このようにした後で、:QuickRun でプログラムを実行し、実行したまま(終了させないで)ブラウザから http://localhost:8000/ へアクセスすれば、動作が確認できると思います。
うまく行かない場合はコマンドラインから直接 node server.js と起動して動作するか確認してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/12/02 23:58

    回答いただきありがとうございます。
    >server.js はサーバを起動するプログラムですので、:QuickRun 実行後に変化がないのは正常です
    quickrun上で、他言語の場合は画面が2つに別れ、実行結果とソースが表示されるのがquickrunの正常な動作であり、こちらの期待することなのですが、
    nodeを実行する場合はその挙動はしないのが正常ということでしょうか。
    参考サイトなどを読んでいる限りでは「quickrunでnodeを実行して確認できる」などの表現が多いので、自分の環境では正常に動いているとは思えず納得がいかないです。

    server.jsでserver.listen(process.env.PORT, process.env.IP);と書きましたが、
    server.listen(1234);に書き換え、192.168.33.10:1234 (ローカルホストアドレス)で実行した結果、ブラウザ上は正常に動きました。
    vimrcの設定にlet $PORT=8000しても、quickrun上では全く変わらず同じ結果でした。

    キャンセル

  • 2015/12/03 00:03

    node かどうかではなく、サーバプログラムであることが問題です。
    server.js はサーバプログラムであり、強制的に終了させるまで実行され続けます。
    一方で、quickrun.vim はプログラムの実行結果を得るためのものです。プログラムは終了していないため、結果は出ません。
    node のプログラムであっても、サーバのように常駐せずきちんと終了するプログラムであれば、quickrun.vim で結果が確認できます。

    キャンセル

  • 2015/12/03 00:16

    ブラウザからアクセスできるのであれば、プログラムは動いています。それはそういうプログラムです。server.js が何をするプログラムなのか理解されているでしょうか?

    キャンセル

  • 2015/12/03 10:58 編集

    thinaさんの仰ることが理解できました。
    確認のために実行結果が得られるプログラムを実行した結果、正常に動作しました。
    ありがとうございました。

    キャンセル

  • 2015/12/03 11:13

    期待している動作を教えてください。

    キャンセル

0

node.js 向けに書いたソースはnode.js上で実行されるものなので、素のJavascriptと同じようには実行できないと思います。

それで、ちょっと強引な方法だとは思いますが、シンボリックリンクを生成して実行可能にしている人もいるようです。(こちらを参照)

一方、通常のEcmaScriptで書いたプログラムをブラウザやNode.jsが実行できる形式のJavaScriptコードに変換してくれるツール(babel)と組み合わせて環境を構築している方もいらっしゃいました。この方法については下記をご参考にどうぞ。
babel + Node.js をvim-quickrunで実行する

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/12/01 10:35

    >node.js 向けに書いたソースはnode.js上で実行されるものなので、素のJavascriptと同じようには実行できないと思います。
    それは以下のように:QuickRun javascriptで実行した時にパスの通ったnodeを呼び出すように設定しているんですが・・・。
    let g:quickrun_config = {
    \ "javascript": {
    \ "command": "node",
    \ "tempfile": "{tempname()}.js"
    \ }
    \ }
    >それで、ちょっと強引な方法だとは思いますが、シンボリックリンクを生成して実行可能にしている人もいるようです。
    この方のやっているjsの起動ディレクトリへのnodeのシンボリックを生成は、:QuickRun javascriptでnodeを呼び出す設定と結局やってることは変わらないと思うのですが・・・。

    キャンセル

  • 2015/12/01 12:16

    「コマンドラインでnodeコマンドを打てば実行できるのでPATHは通っているとと思います」というのは、シェルの環境変数なので、全てのプラグインがシェルの環境変数に依存する実装になっているとは限りませんよね?
    試しに「\ "command": "node",」の部分をフルパスで書いてみてはどうですか?
    node.jsではありませんが、下記ページの設定例ではフルパスで書いていますよ。
    > http://d.hatena.ne.jp/osyo-manga/touch/20130311/1363012363

    キャンセル

  • 2015/12/02 11:54

    返信ありがとうございます。
    >シェルの環境変数だから全てのプラグインがシェルの環境変数に依存する実装になっているとは限らない
    その通りだと思いますが、質問前にもう既に試行済みで解決には至りませんでした。
    以下が試したコードですが見ていただけますか?
    [vagrant@vagrant-centos64 ~]$ which node
    ~/.nodebrew/current/bin/node
    [vagrant@vagrant-centos64 ~]$ echo $HOME
    /home/vagrant
    <.vimrc>
    let g:quickrun_config = {
    \ "node": {
    \ "command": "/home/vagrant/.nodebrew/current/bin/node",
    \ "tempfile": "{tempname()}.js"
    \ }
    \ }
    <vim>
    :QuickRun node

    キャンセル

0

windowsの環境ですが成功すればquickrun後、vimの操作が出来なくなり、

コマンドプロンプトでnode.jsが実行されます。

その状態でブラウザでアクセスすれば、ページを確認することができます。

[quickrun output]にソースなどの表示はされないので注意してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/12/02 12:04

    回答ありがとうございます。
    私の環境の場合phpやjavascriptは正常に実行できるのですが、node.jsだけ実行不可能な状態です。
    仰る通り正常に動いていれば、バッファを開き、:QuickRunを実行、
    すると"[quickrun output]" [New File] と表示され、実行結果とソースコードが分けて表示されます。

    nodeでの実行の場合、"[quickrun output]" [New File] と表示され、実行結果とソースコードが分けて表示されるはずが全く画面が変化しない挙動です。
    よろしくお願いいたします

    キャンセル

  • 2015/12/02 13:27

    画面が固まるのであれば、動作していると思うのでその状態でブラウザでアクセスすると確認できると思います。

    `javascrpt`が動くのであれば、vimrcに設定は不要です。nodeファイルが`set ft`で`javascript`になっていれば動きます。

    最初は、quickRunを使用せずに、コマンドで`node sample.js`で動作させブラウザで確認してからQuickRunで試してみるのがいいかもしれません。

    キャンセル

  • 2015/12/02 19:01

    回答有り難うございます。
    ブラウザでの動作を確認したエラーのないコードでも:QuickRun 後に変化がありません。
    node自体のコマンドは実行可能で、ブラウザ・ターミナル共に動作は確認しています。
    また、質問文にもある通り、phpファイルや純粋なjavascriptファイルのquickrun実行はできます。
    javascriptのコード(例えばconsole.log())は実行できるのに
    node.jsを含んだ処理(例えばrequire('http'))が実行出来ないことが不思議でなりません。
    よろしくお願いします。

    キャンセル

  • 2015/12/03 09:57

    console.log()とrequire('http')の処理は全く別物になる為、

    QuickRunでは、morikzさんの求めているrequire('http')の表示はできないです。

    詳しい内容は、thincaさんが書かれています。

    キャンセル

同じタグがついた質問を見る

  • Linux

    4290questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Node.js

    2232questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • Vim

    558questions

    VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。