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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

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

Linux

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

Vim

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

Q&A

解決済

3回答

3382閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Node.js

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

Linux

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

Vim

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

0グッド

1クリップ

投稿2015/11/30 15:44

編集2015/12/02 15:10

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

node.jsの実行したいファイル名は「server.js」です。
quickrunはファイルの拡張しから実行するべき処理系を自動で識別するそうですが、.js拡張子のファイルは標準ではjavascriptが実行される様になっているそうです。
なのでNodeの実行ファイルであるnodeコマンドを代わりに使用するために
.vimrcファイルの設定には以下のように書いてあります。
(コマンドラインでnodeコマンドを打てば実行できるのでPATHは通っているとと思います)

linux

1 let g:quickrun_config = { 2 \ "javascript": { 3 \ "command": "node", 4 \ "tempfile": "{tempname()}.js" 5 \ } 6 \ }

この設定でバッファを開いて「\r」で実行するのですが、全く反応がありません。
ちなみに、phpファイルや純粋なjavascriptファイルのquickrun実行はできます。 

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

追加でquickrunで実行するserver.jsと.vimrcのすべてのソースを追記します。

linux

1//server.js 2var http = require('http'); 3 4var server = http.createServer(); 5server.on('request', doRequest); 6server.listen(process.env.PORT, process.env.IP); 7console.log('Server running!'); 8 9// リクエストの処理 10function doRequest(req, res) { 11res.writeHead(200, {'Content-Type': 'text/plain'}); 12res.write('Hello World\n'); 13res.end(); 14}

linux

1" .vimrc 2" 表示設定 3set number "行番号を表示する 4set title "編集中のファイル名を表示 5set showmatch "括弧入力時の対応する括弧を表示 6syntax on "コードの色分け 7set tabstop=4 "インデントをスペース4つ分に設定 8set smartindent "オートインデント 9 10" 行番号の色を設定 11hi LineNr ctermbg=none ctermfg=8 12hi CursorLineNr ctermbg=10 ctermfg=255 13set cursorline 14hi clear CursorLine 15 16" 検索設定 17set ignorecase "大文字/小文字の区別なく検索する 18set smartcase "検索文字列に大文字が含まれている場合は区別して検索する 19set wrapscan "検索時に最後まで行ったら最初に戻る 20" 21" 22"--------------------------- 23" Start Neobundle Settings. 24"--------------------------- 25" bundleで管理するディレクトリを指定 26set runtimepath+=~/.vim/bundle/neobundle.vim/ 27" 28" Required: 29call neobundle#begin(expand('~/.vim/bundle/')) 30" 31NeoBundleFetch 'Shougo/neobundle.vim' 32" quickrumを設定 33NeoBundle 'thinca/vim-quickrun' 34 let g:quickrun_config = { 35 \ "node": { 36 \ "command": "node", 37 \ "tempfile": "{tempname()}.js" 38 \ } 39 \ } 40" 41" autocloseを設定 42NeoBundle 'Townk/vim-autoclose' 43" 44call neobundle#end() 45" 46" Required: 47filetype plugin indent on 48" 49NeoBundleCheck 50" ------------------------- 51" End Neobundle Settings. 52" ------------------------- "

linux

1# .bash_profile 2 3# Get the aliases and functions 4if [ -f ~/.bashrc ]; then 5 . ~/.bashrc 6fi 7# User specific environment and startup programs 8PATH=$PATH:$HOME/bin 9export PATH

linux

1# .bashrc 2 3# Source global definitions 4if [ -f /etc/bashrc ]; then 5 . /etc/bashrc 6fi 7# User specific aliases and functions 8export PATH=$HOME/.nodebrew/current/bin:$PATH

nodejsとphpをQuickRunした時の画面結果を2枚ずつ載せます
イメージ説明
イメージ説明
イメージ説明
イメージ説明
ご覧の通りnodeでは動きませんが、phpだと動くのがわかると思います。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thinca

2015/12/02 10:27

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

退会済みユーザー

2015/12/02 11:40

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

回答3

0

ベストアンサー

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

vim

1let $PORT = 8000

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

投稿2015/12/02 13:39

thinca

総合スコア1864

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/02 14: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上では全く変わらず同じ結果でした。
thinca

2015/12/02 15:03

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

2015/12/02 15:16

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

退会済みユーザー

2015/12/03 02:14 編集

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

2015/12/03 02:13

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

0

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

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

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

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

投稿2015/12/02 02:35

ymknjugg

総合スコア131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/02 03:04

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

2015/12/02 04:27

画面が固まるのであれば、動作していると思うのでその状態でブラウザでアクセスすると確認できると思います。 `javascrpt`が動くのであれば、vimrcに設定は不要です。nodeファイルが`set ft`で`javascript`になっていれば動きます。 最初は、quickRunを使用せずに、コマンドで`node sample.js`で動作させブラウザで確認してからQuickRunで試してみるのがいいかもしれません。
退会済みユーザー

退会済みユーザー

2015/12/02 10:01

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

2015/12/03 00:57

console.log()とrequire('http')の処理は全く別物になる為、 QuickRunでは、morikzさんの求めているrequire('http')の表示はできないです。 詳しい内容は、thincaさんが書かれています。
guest

0

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

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

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

投稿2015/11/30 22:06

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/01 01:35

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

2015/12/01 03:16

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

退会済みユーザー

2015/12/02 02: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
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問