LoginSignup
0
0

More than 5 years have passed since last update.

scala+gvim+windows10で補完ができるようになるまで

Last updated at Posted at 2019-02-27

概要

scalaでコーディングする時はEmacsやIntelliJ IDEAを使う場合が多いようですが、Vim派としてはVim以外での開発はあり得ません。Vimでscalaの補完をする方法はあまりないようですが、ensimeという言語サーバをvimから使う方法があります。しかし、このensimeのセットアップ方法に詰まったりしたので、ここにまとめる。

環境構築

sbtとgitとjdk11のインストール

下記コマンドを管理者権限で実行しPackageManagementからChocolateyGet経由でsbt,git jdk11をインストールします。インストールが終わったら一旦powershellを閉じます。

Set-ExecutionPolicy -Force RemoteSigned
Install-PackageProvider ChocolateyGet -Force
Install-Package sbt -ProviderName ChocolateyGet -Force
Install-Package git -ProviderName ChocolateyGet -Force
Install-Package jdk11 -ProviderName ChocolateyGet -Force

※PackageManagementについてはこちら
https://qiita.com/k_takashi0309/items/3992b8ee68c256202bcf

sbtのプラグインインストール準備

New-Item ~/.sbt/1.0/plugins -ItemType directory
Write-Output "addSbtPlugin(`"org.ensime`" % `"sbt-ensime`" % `"2.5.1`")"| Add-Content ~/.sbt/1.0/plugins/plugins.sbt
Write-Output "addSbtPlugin(`"com.eed3si9n`" % `"sbt-assembly`" % `"0.14.9`")"| Add-Content ~/.sbt/1.0/plugins/plugins.sbt

上記コマンドを実行するとsbtの設定ファイルにsbt-ensimeとsbt-assemblyが追加されます。sbt起動時にインストールされます。

python付きのgvimのインストール

香り屋からgvimをダウンロード・解凍します。
https://www.kaoriya.net/software/vim/

コマンドでダウンロードする場合は下記実行(Cドライブ直下に解凍します)

Invoke-WebRequest -uri https://github.com/koron/vim-kaoriya/releases/download/v8.1.0005-20180520/vim81-kaoriya-win64-8.1.0005-20180520.zip -OutFile $env:temp\gvim.zip
Expand-Archive $env:temp\gvim.zip -DestinationPath C:\
remove-item $env:temp\gvim.zip

python3.5のインストール

gvimはデフォルトではpythonのバージョン3.5を探します。pythonはバージョンやライブラリの環境がインストールするシステムに依存してしまうのでgvim用にembeddable python3.5を入れます。
下記からPython3.5のWindows x86-64 embeddable zip fileをダウンロード・解凍してgvimがあるフォルダに入れときます。
https://www.python.org/downloads/windows/

コマンドでダウンロードする場合は下記実行

Invoke-WebRequest -uri https://www.python.org/ftp/python/3.5.4/python-3.5.4-embed-amd64.zip -OutFile $env:temp\embedpython.zip
Expand-Archive $env:temp\embedpython.zip -DestinationPath C:\vim81-kaoriya-win64\python-3.5.4-embed-amd64
remove-item $env:temp\embedpython.zip

pythonにライブラリをインストール

gvimに入れたembeddable pythonに必要なライブラリを入れます。
python35.zipは解凍してフォルダ名をpython35.zipにする必要があります。

cd C:\vim81-kaoriya-win64\python-3.5.4-embed-amd64
expand-archive python35.zip
remove-item python35.zip
Rename-Item python35 -newname python35.zip
wget "https://bootstrap.pypa.io/get-pip.py" -O "get-pip.py"
.\python.exe get-pip.py
.\python.exe -m pip install websocket-client sexpdata

gvimでembed-pythonのPATHを通す

下記スクリプトを_vimrcに追加する

if has('vim_starting')
    let $PATH = $VIM . "\\python-3.5.4-embed-amd64;" . $VIM . "\\python-3.5.4-embed-amd64\\Scripts;" . $PATH
    let $PYTHONPATH = $VIM . "\\python-3.5.4-embed-amd64\\Lib\\site-packages;" . $VIM . "\\python-3.5.4-embed-amd64"    
    let g:python3_host_prog = $VIM . "\\python-3.5.4-embed-amd64\\python.exe"
endif

下記コマンドをpowershellで実行しても追加できます。

$script =@'

if has('vim_starting')
  let $PATH = $VIM . "\\python-3.5.4-embed-amd64;" . $VIM . "\\python-3.5.4-embed-amd64\\Scripts;" . $PATH
  let $PYTHONPATH = $VIM . "\\python-3.5.4-embed-amd64\\Lib\\site-packages;" . $VIM . "\\python-3.5.4-embed-amd64"
  let g:python3_host_prog = $VIM . "\\python-3.5.4-embed-amd64\\python.exe"
endif

'@
$script|Add-Content C:\vim81-kaoriya-win64\_vimrc -NoNewline

ensime-vimのインストール

下記からvimプラグインのensime-vimをインストールします。
https://github.com/ensime/ensime-vim
vimのプラグインマネージャを利用している場合はプラグインマネージャ経由でインストールするとよいでしょう。
私はプラグインマネージャを使わない派なので下記コマンドでインストールします。

New-Item C:\vim81-kaoriya-win64\vimfiles\pack\Mypack\opt -ItemType directory
cd C:\vim81-kaoriya-win64\vimfiles\pack\Mypack\opt
git clone https://github.com/ensime/ensime-vim.git

deopleteのインストール

Vimは標準ででオムニ補完ができますが、自動で補完を出すプラグインがあるので、それをいれるとコーディングが捗ります。自動補完のプラグインはいろいろありますが、ensimeでの補完は若干時間がかかるので非同期で補完を実行してくれるdeopleteが良いです。

deopleteは下記からプラグインマネージャ等でインストールしてください。
https://github.com/Shougo/deoplete.nvim.git

プラグインマネージャを使わない派は下記コマンドでインストールしてください。

New-Item C:\vim81-kaoriya-win64\vimfiles\pack\Mypack\opt -ItemType directory
cd C:\vim81-kaoriya-win64\vimfiles\pack\Mypack\opt
git clone https://github.com/Shougo/deoplete.nvim.git
git clone https://github.com/roxma/vim-hug-neovim-rpc.git
git clone https://github.com/roxma/nvim-yarp.git

deoplete用の設定を_vimrcに追加

下記設定を_vimrcに追加します。

  packadd vim-hug-neovim-rpc "deopleteの依存
  packadd nvim-yarp "deopleteの依存
  let g:deoplete#enable_at_startup = 1
  let g:deoplete#auto_complete_delay = 0
  let g:deoplete#auto_complete_start_length = 1
  let g:deoplete#enable_camel_case = 0
  let g:deoplete#enable_ignore_case = 0
  let g:deoplete#enable_refresh_always = 0
  let g:deoplete#enable_smart_case = 1
  let g:deoplete#file#enable_buffer_path = 1
  let g:deoplete#max_list = 10000
  packadd deoplete.nvim
  call deoplete#custom#option('omni_patterns', {'scala': '[^. *\t]\.\w*'}) "omniが発動するタイミング


コマンドで追加する場合は下記

$script =@'

  packadd vim-hug-neovim-rpc "deopleteの依存
  packadd nvim-yarp "deopleteの依存
  let g:deoplete#enable_at_startup = 1
  let g:deoplete#auto_complete_delay = 0
  let g:deoplete#auto_complete_start_length = 1
  let g:deoplete#enable_camel_case = 0
  let g:deoplete#enable_ignore_case = 0
  let g:deoplete#enable_refresh_always = 0
  let g:deoplete#enable_smart_case = 1
  let g:deoplete#file#enable_buffer_path = 1
  let g:deoplete#max_list = 10000
  packadd deoplete.nvim
    call deoplete#custom#option('omni_patterns', {'scala': '[^. *\t]\.'}) "omniが発動するタイミング
    call deoplete#custom#option('keyword_patterns', { 'scala': ''}) "omni以外は使わない

'@
$script|Add-Content C:\vim81-kaoriya-win64\_vimrc -NoNewline

aleをインストール

構文チェックにaleを利用するのでインストールします。

New-Item C:\vim81-kaoriya-win64\vimfiles\pack\Mypack\opt -ItemType directory
cd C:\vim81-kaoriya-win64\vimfiles\pack\Mypack\opt
git clone https://github.com/w0rp/ale.git

ale用の設定を_vimrcに追加

下記設定を_vimrcに追加します。

  let g:ale_completion_enabled = 1
  packadd ale 
  let g:ale_linters = {'scala': ['sbtserver']}
  let g:ale_lint_on_save = 1

コマンドで追加する場合は下記

$script =@'

  let g:ale_completion_enabled = 1
  packadd ale 
  let g:ale_linters = {'scala': ['sbtserver']}
  let g:ale_lint_on_save = 1

'@
$script|Add-Content C:\vim81-kaoriya-win64\_vimrc -NoNewline

環境変数HOMEを設定する

ensime-vimで実行されるPythonスクリプト内で環境変数HOMEを参照しているので、設定していないとエラーになる。(これの原因に気付くのに数日かかりました)
powershellでは自動変数としてHOMEが定義されているが、Vimから起動されるPythonではHOMEが定義されないようなので、下記コマンドで環境変数HOMEにPowershellの自動変数HOMEを入れておく。

[System.Environment]::SetEnvironmentVariable("HOME", $HOME, "User")

プロジェクト作成

プロジェクトディレクトリの作成

以降プロジェクトの名前をsampleProjectとします。


New-Item sampleProject -ItemType directory

ensimeの初期化


cd sampleProject
write-output c|sbt ensimeConfig
write-output c|sbt ensimeConfigProject

gitの初期化

git init
Write-Output "target/"| Add-Content .gitignore

build.sbtの作成

$projectName = (get-item (get-location).Path).Name
$buildsbt = @"
name := "$projectName"
version := "1.0"
"@
$buildsbt|Add-Content build.sbt -NoNewline

コーディングの仕方

自動コンパイル

scalaのコーディング中はsbtを起動したままにしておき、ファイル保存時に自動コンパイルするコマンドを実行しておきます。

sbt
~assembly

補完

.を入力するとdeopleteによって自動的にomni補完が実行されます。

構文チェック

ファイル保存時にaleで構文チェックが行われ、エラーがあれば表示されます。

実行

sbt runでも実行できますが、標準入出力を渡したりとかする場合は面倒なのでjavaコマンドで実行します。

 java -jar .\target\scala-2.12\sample-assembly-1.0.jar

ファイルarg.txtの中身を標準入力に渡す場合は下記のように実行します。

Get-Content .\arg.txt | java -jar .\target\scala-2.12\sample-assembly-1.0.jar
0
0
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
0
0