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

Vim を Scala の IDE にする

$
0
0

渋々 Intellij でscalaを書いていたそこのあなた
vim で シンタックスハイライトはもちろん、 Intellij みたいにフォーマットも構文チェックもでできちゃうんです。

環境

  • Mac OS Mojave
  • Vim 8.1 (ターミナル機能を使うには現時点でver 8,1 が必須。)
  • sbt 1.0 ~
  • ENSIME
  • vim-plug
  • neovim

scalafmtのインストール

brew install--HEAD olafurpg/scalafmt/scalafmt
scalafmt --version // 2.0.0-RC7 以降なら成功

sbtの設定

globalに設定していきます。どちらも最低限なのでコピペで追加してどうぞ。

~/.sbt/1.0/plugins/plugins.sbt
addSbtPlugin("org.scalameta"%"sbt-scalafmt"%"2.0.0")addSbtPlugin("org.ensime"%"sbt-ensime"%"2.5.1")addSbtPlugin("com.eed3si9n"%"sbt-assembly"%"0.14.9")
~/.sbt/1.0/global.sbt
importorg.ensime.EnsimeCoursierKeys._importorg.ensime.EnsimeKeys._ensimeRepositoryUrlsinThisBuild+="https://oss.sonatype.org/content/repositories/snapshots/"ensimeServerVersioninThisBuild:="3.0.0-SNAPSHOT"ensimeProjectServerVersioninThisBuild:="3.0.0-SNAPSHOT"cancelableinGlobal:=trueensimeJavaHomeinThisBuild:=file("/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home")serverConnectionType:=ConnectionType.TcpserverPort:=4273

sbt-assemblyはなくても困りませんがプロジェクトをjarにコンパイルしてデプロイしたり sbt環境 を持っていない人に配ったりしたいときに重宝します。

Vimプラグインたち

 
- neocomplete            補完
- deoplete              補完
- vim-scala             シンタックスハイライト
- ensime-vim             シンタックスハイライト
- nvim-yarp             neovimじゃない人向け
- vim-hug-neovim-rpc        なにこれ
- neovim-fuzzy aleのつきもの
- neomake               aleのつきもの
- vim-autoformat'          フォーマッタ
- ale                構文チェック

vimrcの設定

set nocompatible
filetype off
language C

"plugを使ってインストール
call plug#begin('~/.vim/plugged')

+ if has('nvim')
+  Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
+ else
+  Plug 'Shougo/deoplete.nvim'
+  Plug 'roxma/nvim-yarp'
+  Plug 'roxma/vim-hug-neovim-rpc'
+ endif

"----------------------------------------------------------
" インストール
"----------------------------------------------------------
+ if has('lua') 
+    " コードの自動補完
+    Plug 'Shougo/neocomplete.vim'
+    " スニペットの補完機能
+    Plug 'Shougo/neosnippet'
+    " スニペット集
+    Plug 'Shougo/neosnippet-snippets'
+ endif

"----------------------------------------------------------
" neocomplete・neosnippetの設定
"----------------------------------------------------------
+ if has('neocomplete.vim')
+    " Vim起動時にneocompleteを有効にする
+    let g:neocomplete#enable_at_startup = 1
+    " smartcase有効化. 大文字が入力されるまで大文字小文字の区別を無視する
+    let g:neocomplete#enable_smart_case = 1
+    " 3文字以上の単語に対して補完を有効にする
+    let g:neocomplete#min_keyword_length = 3
+    " 区切り文字まで補完する
+    let g:neocomplete#enable_auto_delimiter = 1
+    " 1文字目の入力から補完のポップアップを表示
+    let g:neocomplete#auto_completion_start_length = 1
+    " バックスペースで補完のポップアップを閉じる
+    inoremap <expr><BS> neocomplete#smart_close_popup()."<C-h>"
+    "targetフォルダを読み込まない
+    set wildignore+=*/target/*
+
+    " 補完ウィンドウの設定
+    set completeopt=menuone
+
+    " rsenseでの自動補完機能を有効化
+    let g:rsenseUseOmniFunc = 1
+    " let g:rsenseHome = '/usr/local/lib/rsense-0.3'
+
+    " auto-ctagsを使ってファイル保存時にtagsファイルを更新
+    let g:auto_ctags = 1
+
+    " 起動時に有効化
+    let g:neocomplcache_enable_at_startup = 1
+
+    " 大文字が入力されるまで大文字小文字の区別を無視する
+    let g:neocomplcache_enable_smart_case = 1
+
+    " _(アンダースコア)区切りの補完を有効化
+    let g:neocomplcache_enable_underbar_completion = 1
+
+    let g:neocomplcache_enable_camel_case_completion  =  1
+
+    " ポップアップメニューで表示される候補の数
+    let g:neocomplcache_max_list = 20
+
+    " シンタックスをキャッシュするときの最小文字長
+    let g:neocomplcache_min_syntax_length = 3
+
+    let g:neocomplete#force_omni_input_patterns.ruby = '[^.*\t]\.\w*\|\h\w*::'
+
+    if !exists('g:neocomplete#keyword_patterns')
+        let g:neocomplete#keyword_patterns = {}
+    endif
+    let g:neocomplete#keyword_patterns['default'] = '\h\w*'
+    " エンターキーで補完候補の確定. スニペットの展開もエンターキーで確定・・・・・・②
+    imap <expr><CR> neosnippet#expandable() ? "<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "<C-y>" : "<CR>"
+    " タブキーで補完候補の選択. スニペット内のジャンプもタブキーでジャンプ・・・・・・③
+    imap <expr><TAB> pumvisible() ? "<C-n>" : neosnippet#jumpable() ? "<Plug>(neosnippet_expand_or_jump)" : "<TAB>"
+ endif
+ " Use deoplete
+ let g:deoplete#enable_at_startup = 1
+
+ "Linting with neomake
+ let g:neomake_sbt_maker = {
+      \ 'exe': 'sbt',
+      \ 'args': ['-Dsbt.log.noformat=true', 'compile'],
+      \ 'append_file': 0,
+      \ 'auto_enabled': 1,
+      \ 'output_stream': 'stdout',
+      \ 'errorformat':
+          \ '%E[%trror]\ %f:%l:\ %m,' .
+            \ '%-Z[error]\ %p^,' .
+            \ '%-C%.%#,' .
+            \ '%-G%.%#'
+     \ }
+ let g:neomake_enabled_makers = ['sbt']
+ let g:neomake_verbose=3
+ " Neomake on text change
+ autocmd InsertLeave,TextChanged * update | Neomake! sbt


" for はファイルタイプがphpならプラグインを読み込む 
" do はプラグインインストール、アップデート時に実行する内容 
Plug 'pangloss/vim-javascript', { 'for': ['javascript', 'javascript.jsx'] }
Plug 'othree/yajs.vim', { 'for': ['javascript', 'javascript.jsx'] }
Plug 'othree/es.next.syntax.vim', { 'for': ['javascript', 'javascript.jsx'] }
Plug 'othree/javascript-libraries-syntax.vim', { 'for': ['javascript', 'javascript.jsx'] }
Plug 'python-mode/python-mode', { 'branch': 'develop' }
Plug 'scrooloose/nerdtree'
Plug 'itchyny/lightline.vim'
Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-fugitive'
+ Plug 'derekwyatt/vim-scala'
Plug 'shime/vim-livedown'
Plug 'flowtype/vim-flow'
Plug 'Yggdroot/indentLine'
Plug 'simeji/winresizer'
Plug 'shinespark/vim-list2tree'
Plug 'fatih/vim-go'
+ Plug 'ensime/ensime-vim', { 'do': ':UpdateRemotePlugins' }
+ Plug 'roxma/nvim-yarp'
+ Plug 'roxma/vim-hug-neovim-rpc'
+ Plug 'cloudhead/neovim-fuzzy'
+ Plug 'neomake/neomake'
+ Plug 'Chiel92/vim-autoformat'
+ Plug 'w0rp/ale'


call plug#end()


+ "構文チェック
+ let g:ale_sign_column_always = 1

filetype indent on
  autocmd FileType hoge        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType hoge        setlocal sw=2 sts=2 ts=2 et
  autocmd FileType js          setlocal sw=2 sts=2 ts=2 et
  autocmd FileType zsh         setlocal sw=4 sts=4 ts=4 et
  autocmd FileType hoge        setlocal sw=4 sts=4 ts=4 et
+ autocmd FileType scala       setlocal sw=2 sts=2 ts=2 et
+ "scalafmt キーマップ
+ noremap <F5> :Autoformat<CR>
+ let g:formatdef_scalafmt = "'scalafmt --stdin'"
+ let g:formatters_scala = ['scalafmt']

そしたら:source .vimrcしてから:PlugInstallしてください。
そんで再び vimを開くと ENSIMEとかが pip install hogehoge しろ〜!とか
brew install hogehogeしろ〜!とか行ってくるのでその通りインストールしてあげてください。
(ちなみに自分はpip3じゃないとダメだった。)

試してみる

これで完成なはず。
試しにvimでインデントグチャグチャのコード書いて:Autoformat叩いたり コードから def句とか抜いて保存してみてください。

↓def句が足りなまま保存した時
スクリーンショット 2019-04-24 6.42.56.png


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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