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

まじで最&高のvim環境を作りたい

$
0
0

どうも、プログラミングを始めて一年ちょいくらいの初心者エンジニアです
普段はscalaを主に書いていて、ちょこちょこAngularとかも書いてます

両方vimを使って書いてますが、定義元ジャンプとか補完機能とかはやっぱりIDEとかVScodeの熱いプラグインが優秀すぎて。。。

じゃぁそっち使えよって話なんですが、基本的なターミナルでの操作がしっかりできるようになるまではIDEじゃなくてemacsとかvim使おうって会社のCTOに言われたので今はvimで開発しています

でもやっぱり強い補完機能、定義元ジャンプ、構文エラーくらいは教えて欲しい。。。

そしたら最近vim-metalsとかいうプラグインが激アツとの情報が流れてきたので入れてみたんですが神すぎたので共有します

環境
OS      MacOS
vimのプラグイン管理Plug
terminalhyper
言語Scala

※ただちゃんと理解はできていないのでおかしいところあったら教えてください:bow_tone1:

それでは早速インストールしていきましょうー!!
Vim・Metals

JDKのバージョン確認

$ java -versionopenjdk version {1.8系}

JDKのバージョンが8系であることを確認してください
9から上はサポートされてないらしいのでもしバージョンが違う場合はJDK8に変えてください

Vimのバージョン確認

$ vim --version | headVIM - Vi IMproved 8.1 (2018 May 18, compiled Feb 19 2019 12:07:03)

vimのバージョンは8.1以上じゃないとダメらしいので確認してください

coc.nvimのダウンロード

Langage Serverっていう各言語ごとの、補完、定義元ジャンプ、ソースコードのエラー解析みたいな機能を提供してくれるものがあるらしく(IDEも要するにこれを使ってあの最強の環境を実現してると)
それらをまとめて管理できるものを入れないといけない(そゆわけでもないのかな)
いくつかあるんだけど一番人気なのはこれらしい

https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md
LSP(Langage Server Protocol)っていう各言語ごとの補完とかを提供する際の規約をMicroSoftがちょっと前に定めたらしい。

ちょっとよくわからない。

まぁいいやとりあえずインストール

#coc.nvimを使うにはnode.jsが必要なので入れるのと
#yarnで拡張機能を管理できるので入れる
$curl -sL install-node.now.sh/lts | sh
$curl --compressed-o--L https://yarnpkg.com/install.sh | bash

できたらPlugっていうvimプラグイン管理ツールを使ってcoc.nvimをInstall
ない人は入れてください
vim-plug導入

" ~/.vimrc" Configuration for vim-plug
Plug 'derekwyatt/vim-scala'
Plug 'neoclide/coc.nvim',{'do':{-> coc#util#install()}}" Configuration for vim-scalaauBufRead,BufNewFile *.sbt setfiletype=scala

そんで:PlugInstallしてください

できたら~/.vim/coc-settings.jsonに以下を追記してください

{"languageserver":{"metals":{"command":"metals-vim","rootPatterns":["build.sbt"],"filetypes":["scala","sbt"]}}}

次にCoursierっていうコマンドラインインターフェースを使って最新のMetalsをビルドします

# Make sure to use coursier v1.1.0-M9 or newer.
$curl -L-o coursier https://git.io/coursier
$chmod +x coursier
$./coursier bootstrap \--java-opt-Xss4m\--java-opt-Xms100m\--java-opt-Dmetals.client=coc.nvim \
  org.scalameta:metals_2.12:0.5.2 \-r bintray:scalacenter/releases \-r sonatype:snapshots \-o /usr/local/bin/metals-vim -f

できたらいけてるはず

Scalaのプロジェクトを開いてみる

初めてbuild.sbtを開くとビルドをインポートしますかって聞かれるので1と入力する
スクリーンショット 2019-05-25 22.50.37.png
頑張ってる
スクリーンショット 2019-05-25 22.53.49.png
でけた
スクリーンショット 2019-05-25 22.54.37.png

vimが最&高に近づいてることを確認

スクリーンショット 2019-05-25 22.58.11.png
怒ってくれた

Importとか
スクリーンショット 2019-05-25 23.03.20.png
こんな手厚い補完が...
選択すると
スクリーンショット 2019-05-25 23.03.29.png
全部書いてくれる。マジすばらしい
それだけじゃない!!
スクリーンショット 2019-05-25 23.05.25.png
なんとわざわざimport書かなくても、、、、、
スクリーンショット 2019-05-25 23.05.50.png
オートインポートしてくれる

しかもしかも!
メソッドの補完までしっかりと。
スクリーンショット 2019-05-25 23.06.23.png
importのソートもしてくれる
:SortScalaImports
ってコマンド打つとimportを言語の規定に沿ってsortしてくれる(いまいちわからんけど)
スクリーンショット 2019-05-25 23.10.36.png

.vimrcファイルに以下を追記して

" Remap keys for gotos
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent>gr<Plug>(coc-references)

Futureのsuccessfulメソッドの上でgdとかやると
スクリーンショット 2019-05-25 23.41.33.png
GOD
スクリーンショット 2019-05-25 23.41.54.png

最&高に近づいたね

今回の記事に関係するリンクは以下です
Vim・Metals
vim-plug導入
https://github.com/blueshirts/darcula
https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md
あなたの sbt update を爆速にする sbt-coursier の紹介
https://hyper.is/


まじで最&高のvim環境を作りたい2

$
0
0

まじで最&高のvim環境を作りたい1

⬆︎の記事ではscala開発環境を最&高にするvim-metalsの導入方法でしたが
今回は

  • HTML
  • CSS、SCSS、LESS  ⇦SASSはないみたいです(ネストをインデントで表現するやつ)
  • TypeScript
  • Angular

の開発環境を最&高にしていきたいとおもいます

前回何したっけ

  1. coc.nvimっていうLSを管理してくれるプラグインの導入
  2. ⬆︎を使ってvim-metalsを導入
  3. Scalaの開発環境を最&高に近づけた

今回何すんの?

前回入れたcoc.nvimさんで他のLS(Langage Server)も追加したい
自分はちょこっとAngular開発もしてるので今回は
html,css,js,ts,angularのLSを追加しようと思う
ついでにオススメのvimrcの設定ファイルもちょこっと

各言語のLSをInstall

結局やることは単純にcoc.nvimの拡張機能を一個一個インストールするだけ
coc.nvim

めんどくさいのでAngularのプロジェクトを作っちゃう

検証なんですがhtm、ts、scss、angularの揃ったプロジェクトつくちゃった方が早い。
初めての人はこちらでAngular cliのインストール済ませてください
https://cli.angular.io/

別に自分でそれぞれのファイル作ってやっても全然大丈夫です

$ ng new angular-exsample
? Would you like to add Angular routing? Yes
? Which stylesheet format would you like to use? {SASS,SCSS,CSS,LESS}から選ぶ
                                                  ⬆︎今回はSCSSを採用

...
..  〜 いろいろ頑張ってる 〜
.
$lsangular-exsample 

$cd angular-example
$ls-al.editorconfig
.gitignore
README.md
angular.json
e2e/
node_modules/
package-lock.json
package.json
src/
tsconfig.json
tslint.json

スタイルシートがscssで生成されるAngularプロジェクトができた

じゃぁ早速LSの方にいきましょう

HTML

まずhtmlファイルを見にいきましょう
適当にsrc/app/app.component.htmlとかでいいでしょう
下の方の空いてるところに
スクリーンショット 2019-05-26 1.36.03.png
今の段階では何も出ないですが、

:CocInstall coc-html

https://github.com/neoclide/coc-html
とすることでhtmlのLSをインストールしてくれます
この時にyarnを使うので初期のyarnのインストールは必須でしたね。。。
スクリーンショット 2019-05-26 1.37.28.png
できたらイェーい

マジYABAI
スクリーンショット 2019-05-26 1.43.07.png
ちゃんとasideとかあんまり使わないタグも補完が。
スクリーンショット 2019-05-26 1.46.06.png

おすすめvimrc設定
内容としてはシンプルで、タグを作った時に</とうてばそのネスト位置にマッチしたタグを勝手に閉じてくれるというもの

augroup HTMLANDXML
  autocmd!
  autocmd Filetype xml inoremap <buffer></ </<C-x><C-o>
  autocmd Filetype html inoremap <buffer></ </<C-x><C-o>
augroup END

ついでにXMLも書いてますがまぁ気にしないでください笑
不要な人は消しても大丈夫です笑

荒技ですが</で閉じた後にそのタグの中で編集していきたい人は
htmlの部分をこんな感じにするとよき

autocmd Filetype html inoremap <buffer></ </<C-x><C-o><ESC>F<i

どういう意味かvimmerならわかると思いますが、

”閉じタグを生成して、ESCでノーマルモードに出て、左側検索のF<を探して飛んでiでINSERTモードに入る”

</に凝縮するっていうめっちゃ行儀悪いコマンド

でもそうするとこんな風になる
vim.gif
タグの付け方クソ適当ですいません。動画撮るのに夢中でなんも考えてなかった笑
でも開発効率上がりそう〜〜〜

まぁ何はともあれ最&高に一歩近づきましたね

CSS

ほぼ同じように

:CocInstall coc-css

https://github.com/neoclide/coc-css

とやればいいだけ

これでもう
scss.gif
こんな風に鬼の補完 + ノーマルモードにすると構文エラーを検知してくれる

TypeScript

:CocInstall coc-tsserver

同じようにLSを追加
https://github.com/neoclide/coc-tsserver

するとこんな感じい(もう適当になってる)
ts.gif
ちゃんとエラー教えてくれるの神

Angular

AngularのLSもあったので追加してみた

:CocInstall coc-angular

スクリーンショット 2019-05-26 4.00.10.png
こんな風に補完が分厚い

これでそこそこ最&高に近づいたんじゃないっすかね

今回の記事に関係するリンク
まじで最&高のvim環境を作りたい1
coc.nvim
https://cli.angular.io/
https://github.com/neoclide/coc-html
https://github.com/neoclide/coc-css
https://github.com/neoclide/coc-tsserver
https://github.com/iamcco/coc-angular
https://github.com/neoclide/coc-vetur

dein.vimを導入したけど理解不足すぎるからとりま箇条書き的な?

$
0
0

dein.vimについて箇条書き?

どうもまちゃです!
とりあえずvimいじって開発環境よくしようと思ったからdein.vimを導入したけど理解不足すぎるからとりあえず自分なりの解釈で箇条書き!
間違ってたり他にもこんなやり方があるよとか教えていただけると嬉しいです!

deinでプラグインを導入するとき

dein.vimはvimのプラグインを管理するためのものです!
プラグインがどういうものかは割愛します...。ごめんね
プラグインを導入するときに大体Git Hubから取ってくるからGit使えるとちょっといいかも!!
プラグインの導入の仕方は

dein.toml
[[plugins]]repo='[導入したいプラグイン]'

導入したいプラグインはGit Hubのリポジトリ名を直接入れるだけ!!
この形で書いてあげるとプラグインの導入自体は終了!
その後に設定とかを書いてあげないと真価を発揮してくれなくて、その設定の読み込みに種類があるからちょっと解説!!

読み込みの種類とファイル

さっき言った通りdeinには読み込みの種類があってその種類によって書くべきファイルが変わってくるので解説!!

ファイル

とりあえずファイルについて解説!
ファイルには2種類あってvimを起動するときにプラグインも一緒に起動させるファイル(dein.toml)とプラグインを遅延させて起動させるファイルの2種類があるよ!!
使い分けはこのあと説明!
(ファイルを分けなくても大丈夫!!でもプラグインを増やしていくと見づらくなるから分けるのをおすすめ!!)

hook_add

プラグインを読み込ませるのに使うやつの1つ目がhook_add!
これはdeinにプラグインが認識されたときにhook_add内に書いてあることを実行してくれるもの!
あとで説明する遅延読み込みを行わないもの!

この子を使うときは、プラグインを起動させるのにキーマッピングをしたり、プラグイン用の変数を設定したりするときに使う!
例としては

dein.toml
[[plugins]]repo='scrooloose/nerdtree'hook_add='''nnoremap<silent><C-e>:NERDTreeToggle<CR>'''

これはNerdTreeっていうプラグインで(このプラグインについては割愛)これを起動するのに:NERDTreeToggleって打たなきゃいけないんだけど、こんな感じで書いといてあげると<C-e>(コントロール+e)で起動することができる!!
<C-e>じゃなくても<C-n>とかEみたいに何でも大丈夫!ただ、割り当てたら元々当てられてたやつは使えなくなるから要注意!!

hook_source

2つ目がhook_source!!
これはプラグインを読み込ませる直前に実行してくれるもの!!
さっき説明したhook_addと対して変わらないけど、こうなるまで何もしないで欲しいときに使う!
これの何がいいかというと、特定の動きをする以外は実行しないから、環境を汚さなくてすむ!!

これを使うときは、deopete.nvim(このプラグインについては割愛)を使うのにlet g:deoplete#enable_at_startup = 1っていうのを書いとかなきゃいけないんだけど、insertに入るまでは一切使わないからそれまで遅延させてあげるとinsertに入らないときは実行しないから無駄がない!!
書くときは

dein_lazy.toml
[[plugins]]repo='Shougo/deoplete.nvim'hook_source='''letg:deoplete#enable_at_startup=1'''on_i=1

on_i = 1はinsertモードに入ったら1を返してってことで、これでinsertに入ったらhook_sourceが実行される!!

hook_post_source

3つ目がhook_post_source!!
これはhook_sourceの反対でプラグインを読み込んだあとに実行してくれるもの!!
これよりあとに紹介するのは今回は実装しなかったので、いいプラグインを見つけ次第書きたいと思いまっす!

hook_post_update

4つ目がhook_post_update!!
これはプラグインのインストール後にコンパイルや関連ツールをインストールするのにbuildオプションが使える!!

hook_done_update

最後がhook_done_update!!
さっき紹介したのはプラグイン毎に実行されてたけど、これは全部のプラグインをインストールしたあとに実行される!!

紹介した読み込みの種類とファイル関係を表にするとこんな感じ!!

hookの種類dein.tomldein_lazy.toml
hook_addOKOK
hook_sourceNOOK
hook_posr_sourceNOOK
hook_post_updateNOOK
hook_done_updateNOOK

簡単にまとめると遅延させるときはlazyへ!!

dein.vimを導入してみて

今回導入して思ったことはプラグイン最高!!!!
プラグイン入れたら色々とモチベが上がってきていい感じになった気がする!!
今回自分が入れたプラグイン一覧と簡単な説明はここhttps://qiita.com/maachan_9692/items/8afe183a1beb5adb9875に載せてあるのでよかったら見てみてください!!

それじゃこんなところで!
以上まちゃでした!!

Docker上で環境を作るメリット

$
0
0

Docker上でミニマムPython環境を作ってみました。
その中で感じた、Docker上で環境を作るメリットを整理しました。

結論

Dockerとは

ざっくり説明すると以下のような感じです。
・軽量で高速に起動、停止などが可能な仮想化基盤
・ミドルウェアのインストールや各種環境設定をコード化して管理できる

分かりやすくまとめられた記事がたくさんあったので、詳細な説明はそれらを参照されるといいかと思います。

何でdockerでやりたかったのか

  • マシンサーバーの環境を汚さずに、簡単に、環境構築がしたかった。
  • 移植が容易な環境を、色々作りたかった。

本題:今回作った環境(DockerImage)

OSはUbuntu18.04を入れました。
dockerのubuntuイメージは本当に最低限のものしか入ってないので、
とりあえずvimをインストール。
(そのままだとviコマンドすら効きません…)

さらに、言語python3をインストール、
python3のパッケージマネージャとしてpip3も入れてます。

  • OS:

    • Ubuntu18.04
  • インストールしたパッケージ:

    • Python 3.6.7
    • pip 9.0.1
    • Vim 8.0

コンテナ内で実行したコマンド一覧

apt update
apt upgrade
apt install vim
apt install python3
apt install python3-pip --fix-missing

Docker上で環境を作ることで享受できる良いこと

移植が圧倒的に楽

もはや言い尽くされた感もありますが、
dockerコンテナとして構築することで
使用するPCにdockerさえ入っていれば
OSやライブラリ、ミドルウェアを意識せずにその環境を使えるのがメリットです。

やろうと思えば、
会社の端末、家の端末、出先の端末、
どこでも同じインフラ環境で作業出来るのはとても便利です。
マシンサーバーとしてのOSは意識しなくて良いのが嬉しいです。

docker cpコマンドでコンテナ-ホスト間のファイルのやりとりも簡単に出来ます。
(マウントポイントとか作らなくて良いんですね)

環境構築のやり直しが出来る

環境作ってる時に想定外のエラーが起こることは多々あります。
・ ライブラリのインストールに失敗して中途半端に何かが入っちゃうとか…
・ パッケージが足りないと言われて、パッケージインストールしたのに結局上手くいかないとか…
・ 何かをインストールしたせいで、それまで上手くいってたものまで動かなくなったとか…
(考えただけで頭が痛くなりますね…。)

そんな時に、dockerであれば
exitコマンドでコンテナから抜けて、
ごちゃごちゃした環境をリセット出来るのはとても有り難いです。

ここでは説明を割愛しますが、
こまめにdocker commitしておけば、
exitしてもcommit時点の環境から作り直せるので
その点でも環境構築のコストは大幅に削減出来ます。

不要なもの運用上必要なものを入れなくて良い

例えば、pythonをインストールして使うとき、
python自体のバージョン管理として
virtualenvとかpyenvを入れて運用することが多いですが、
docker上で環境を作る時はそれらのミドルウェアを入れなくて良いと(個人的には)思っています。

他のバージョンのpythonを入れたいときは
別のコンテナやイメージを作れば解決しますからね。

簡単な構成にしておくことは
環境を作る上でも、運用上でもメリットは大きいです。
(少なくとも、ある日突然、pyenvコマンドが効かない…みたいな絶望からは距離をおくことが出来るんじゃないですかね)

まとめ

dockerコンテナ毎に様々な環境を、独立して作れるので
ややこしいライブラリを気にせず入れたり、
各言語、ライブラリの最適化環境を作ったりできるのが嬉しいですね。

環境構築コストも軽減できるので、気軽に試せて良いと思います。

dein.tomlでプラグインに別名を与えたい

$
0
0

状況

dein.vimでvimのカラースキームを管理しようとしたら、vimというプラグインが出てきた。
よく見ると、draculaのリポジトリ名がvimになっている。
https://github.com/dracula/vim

パッケージを入れる際、deinはそのままリポジトリ名を使用するようなので、実害はなかったが、 vimという名前でインストールされているのがちょっと気になった。

解決

なんのことはない、nameをつければいいだけだった。

[[plugins]]repo='dracula/vim'name='dracula'

これで draculaとしてプラグインがdeinに認知された。

dein.vimでプラグイン管理[toml]

$
0
0

.vimrcだけで管理していたvimの設定やプラグインをtomlファイルで管理することにした。
読み込み遅延などの設定をしたら、以前より起動や挙動が高速になった。

環境

  • Mojave 10.14.5(18F132)
  • NEOVIM v0.3.4

はじめに

当方のとりあえずvimrc晒すをQiitaで公開してから1年半以上が経過して、各種プラグインのアップデートや、当方の業務内容にも変化が出てきたため、記事も都度編集はしてきましたが、結果的にかつての.vimrcからは大きく内容が変わりました。

加えて、当方でdein.vimとtomlファイルによるプラグインの管理方法が確立してきたため、もう一度まとめて、公開しようと思い立ちました。

私自身が先人の素晴らしいリソースに幾度となく救われてきた身です。
この稚拙な記事が、少しでも困っている方の参考になれば幸いです。

ファイル構成

~
├── .config/
│   └── nvim/
│       └── init.vim
│
└── .vim/
    │
    ├── colors/
    │   └── Benokai.vim(省略)
    │
    ├── dein/
    │   └── (省略)
    │
    └── userautoload/
        │
        ├── dein/
        │   ├── lazy.toml
        │   └── plugins.toml
        │
        └── init/
            ├── basic.vim
            └── mapping.vim

init.vim

~/.config/nvim/init.vim
if $compatible
  set nocompatible " Be iMproved
endifset rtp+=~/.vim/
runtime! userautoload/init/*.vim
runtime! userautoload/dein/*.vimlets:dein_dir= expand('~/.vim/dein')"コマンド実行する $ git clone https://github.com/Shougo/dein.vim.git ~/.vim/dein/repos/github.com/Shougo/dein.vimset rtp+=~/.vim/dein/repos/github.com/Shougo/dein.vim" dein.vim がなければ github から落としてくるif&runtimepath !~# '/dein.vim'if!isdirectory(s:dein_repo_dir)
    execute '!git clone https://github.com/Shougo/dein.vim's:dein_repo_direndif
  execute 'set runtimepath^='. fnamemodify(s:dein_repo_dir,':p')endifif dein#load_state(s:dein_dir)call dein#begin(s:dein_dir)call dein#load_toml('~/.vim/userautoload/dein/plugins.toml',{'lazy':0})call dein#load_toml('~/.vim/userautoload/dein/lazy.toml',{'lazy':1})call dein#end()call dein#save_state()endifif dein#check_install()call dein#install()endif"シンタックスハイライト
syntax on"配色設定set t_Co=256
autocmd ColorScheme * highlight Normal ctermbg=none
autocmd ColorScheme * highlight LineNr ctermbg=none

"カラースキーマ"http://pyoonn.hatenablog.com/entry/2014/10/04/225321"https://github.com/benjaminwhite/Benokaicolorscheme Benokai

"配色・ハイライト設定
highlight Comment ctermfg=239
highlight Number ctermfg=09
highlight LineNr ctermfg=07
highlight Directory ctermfg=118
highlight RubyInstanceVariable ctermfg=208
highlight htmlTag ctermfg=15
highlight htmlEndTag ctermfg=15
highlight Search term=reverse ctermfg=black ctermbg=248"補完の配色
highlight Pmenu ctermbg=239
highlight PmenuSel ctermbg=6
highlight PMenuSbar ctermbg=239" gitgutterの色set updatetime=250letg:gitgutter_max_signs=500letg:gitgutter_map_keys=0letg:gitgutter_override_sign_column_highlight=0
highlight clear SignColumn
highlight GitGutterAdd ctermfg=2
highlight GitGutterChange ctermfg=3
highlight GitGutterDelete ctermfg=1
highlight GitGutterChangeDelete ctermfg=4"シンタックスハイライト(syntax onより前に書かない)
autocmd User Rails.view*                 NeoSnippetSource ~/.vim/snippet/ruby.rails.view.snip
autocmd User Rails.controller*           NeoSnippetSource ~/.vim/snippet/ruby.rails.controller.snip
autocmd User Rails/db/migrate/*          NeoSnippetSource ~/.vim/snippet/ruby.rails.migrate.snip
autocmd User Rails/config/routes.rb      NeoSnippetSource ~/.vim/snippet/ruby.rails.route.snip

" 奇数インデントのカラー
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd  guibg=#333333 ctermbg=235" 偶数インデントのカラー
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=#2c2c2c ctermbg=240"全角スペースをハイライト表示function! ZenkakuSpace()
  highlight ZenkakuSpace cterm=reverse ctermfg=DarkMagenta gui=reverse guifg=DarkMagenta
endfunctionif has('syntax')
  augroup ZenkakuSpace
  autocmd!
  autocmd ColorScheme       * call ZenkakuSpace()
  autocmd VimEnter,WinEnter * match ZenkakuSpace / /
  augroup END
  call ZenkakuSpace()endif

lazy.toml

~/.vim/userautoload/dein/lazy.toml
[[plugins]]repo='Shougo/denite.nvim'[[plugins]]repo='Shougo/unite.vim'[[plugins]]repo='ujihisa/unite-colorscheme'on_source=['unite.vim'][[plugins]]repo='Shougo/deoplete.nvim'hook_add='''letg:deoplete#enable_at_startup=1setcompleteopt+=noinsert'''[[plugins]]repo='Shougo/neosnippet.vim'[[plugins]]repo='Shougo/neosnippet-snippets'on_source=['neosnippet.vim'][[plugins]]repo='othree/html5.vim'on_ft=['html','vue']hook_add='''letg:html5_event_handler_attributes_complete=1letg:html5_rdfa_attributes_complete=1letg:html5_microdata_attributes_complete=1letg:html5_aria_attributes_complete=1'''[[plugins]]repo='vim-ruby/vim-ruby'on_ft=['ruby'][[plugins]]repo='tpope/vim-rails'on_ft=['ruby'][[plugins]]repo='alpaca-tc/vim-endwise.git'on_ft=['ruby']hook_add='''letg:endwise_no_mappings=1'''[[plugins]]repo='jelera/vim-javascript-syntax'on_ft=['javascript'][[plugins]]repo='digitaltoad/vim-pug'on_ft=['pug'][[plugins]]repo='hail2u/vim-css3-syntax'on_ft=['css','scss','sass'][[plugins]]repo='cakebaker/scss-syntax.vim'on_ft=['css','scss','sass'][[plugins]]repo='slim-template/vim-slim'on_ft=['slim'][[plugins]]repo='posva/vim-vue'on_ft=['vue'][[plugins]]repo='cespare/vim-toml'on_ft=['toml'][[plugins]]repo='plasticboy/vim-markdown'on_ft=['markdown'][[plugins]]repo='elzr/vim-json'hook_add='''letg:vim_json_syntax_conceal=0'''on_ft=['json']

plugins.toml

~/.vim/userautoload/dein/plugins.toml
[[plugins]]repo='vim-airline/vim-airline'depends=['/vim-airline-themes'][[plugins]]repo='vim-airline/vim-airline-themes'hook_add='''setlaststatus=2letg:airline_powerline_fonts=1letg:airline#extensions#tabline#enabled=1letg:airline#extensions#tabline#buffer_idx_mode=1letg:airline#extensions#whitespace#mixed_indent_algo=1letg:airline_theme='dark''''[[plugins]]repo='Shougo/vimfiler.vim'hook_add='''augroupvimfilerautocmd!autocmdFileTypevimfilercalls:vimfiler_settings()augroupENDfunction!s:vimfiler_settings()nnoremap<silent><buffer><expr>svimfiler#do_switch_action('split')nnoremap<silent><buffer><expr>vvimfiler#do_switch_action('vsplit')endfunctionletg:vimfiler_as_default_explorer=1letg:vimfiler_safe_mode_by_default=0letg:vimfiler_tree_leaf_icon=" "letg:vimfiler_tree_opened_icon=''letg:vimfiler_tree_closed_icon=''letg:vimfiler_file_icon='-'letg:vimfiler_marked_file_icon='✓'letg:vimfiler_readonly_file_icon='✗'letg:vimfiler_ignore_pattern='^\%(.git\|.DS_Store\)$'nnoremapfi:VimFilerBufferDir<CR>nnoremapfe:VimFilerExplorer-split-winwidth=35-toggle-no-quit<CR>'''[[plugins]]repo='ryanoasis/vim-devicons'hook_add='''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols={}letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['html']=''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['css']=''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['md']=''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['txt']=''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['erb']=''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['slim']=''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['scss']=''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['sass']=''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['js']=''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['coffee']=''letg:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['rb']='''''[[plugins]]repo='terryma/vim-multiple-cursors'hook_add='''function!Multiple_cursors_before()ifexists(':NeoCompleteLock')==2exe'NeoCompleteLock'endifendfunctionfunction!Multiple_cursors_after()ifexists(':NeoCompleteUnlock')==2exe'NeoCompleteUnlock'endifendfunction'''[[plugins]]repo='tpope/vim-fugitive'hook_add='''letg:airline#extensions#branch#enabled=1nnoremap[fugitive]<Nop>nmap<space>g[fugitive]nnoremap<silent>[fugitive]s:Gstatus<CR><C-w>Tnnoremap<silent>[fugitive]a:Gwrite<CR>nnoremap<silent>[fugitive]c:Gcommit-v<CR>nnoremap<silent>[fugitive]b:Gblame<CR>nnoremap<silent>[fugitive]p:Gpull<CR>nnoremap<silent>[fugitive]d:Gdiff<CR>nnoremap<silent>[fugitive]m:Gmerge<CR>'''[[plugins]]repo='airblade/vim-gitgutter'[[plugins]]repo='cohama/agit.vim'[[plugins]]repo='itchyny/vim-parenmatch'[[plugins]]repo='itchyny/vim-cursorword'[[plugins]]repo='tomtom/tcomment_vim'hook_add='''nmapwwgccvmapwwgccif!exists('g:tcomment_types')letg:tcomment_types={}endifletg:tcomment_types['eruby']='<%# %s %>'letg:tcomment_types['erb']='<%# %s %>'letg:tcomment_types['scss']='/*%s*/'letg:tcomment_types['pug']='//%s'letg:tcomment_types['toml']='# %s''''[[plugins]]repo='alvan/vim-closetag'hook_add='''letg:closetag_filenames='*.html,*.xhtml,*.phtml,*.erb,*.php,*.vue''''[[plugins]]repo='mikoto2000/buffer_selector.vim'hook_add='''noremap<Space><Space><Esc>:callbuffer_selector#OpenBufferSelector()<Enter>'''[[plugins]]repo='lilydjwg/colorizer'[[plugins]]repo='Shougo/context_filetype.vim'[[plugins]]repo='osyo-manga/vim-precious'[[plugins]]repo='nathanaelkane/vim-indent-guides'hook_add='''letg:indent_guides_enable_on_vim_startup=1letg:indent_guides_auto_colors=0letg:indent_guides_exclude_filetypes=['help','vimfiler']'''[[plugins]]repo='machakann/vim-highlightedyank'hook_add='''letg:highlightedyank_highlight_duration=200'''[[plugins]]repo='bfredl/nvim-miniyank'hook_add='''mapp<Plug>(miniyank-autoput)mapP<Plug>(miniyank-autoPut)'''[[plugins]]repo='junegunn/fzf'build='./install--bin'merged='0'[[plugins]]repo='junegunn/fzf.vim'depends='fzf'hook_add='''command!-bang-nargs=*Rg\callfzf#vim#grep(\'rg--line-number--no-heading'.shellescape(<q-args>),0,\fzf#vim#with_preview({'options': '--exact --reverse'}, 'right:50%:wrap'))'''[[plugins]]repo='wakatime/vim-wakatime'[[plugins]]repo='neoclide/coc.nvim'build='./install.shnightly'hook_add='source~/.config/nvim/coc-settings.json'

basic.vim

~/.vim/userautoload/init/basic.vim
"エンコード系set encoding=utf-8set fileencoding=utf-8set termencoding=utf-8"ファイルフォーマットset fileformat=unix

"ビープ音を消すset belloff=all"スクロール時に一番下までカーソルが移動しないset scrolloff=5"行番号表示setnumber"行の相対表示をやめるset norelativenumber

"backspaceの機能設定(字下げ、行末、挿入の開始点を超えて削除)set backspace=2"カーソルがある行をハイライト表示set cursorline

"カーソル位置のカラムをハイライト表示しないset nocursorcolumn

"左右のカーソル移動で行移動set whichwrap=b,s,h,l,<,>,[,]"swapfileを生成しないsetnoswapfile"Always display the statusline in all windowsset laststatus=2"Always display the tabline, even if there is only one tabset showtabline=2"検索したワードをハイライトset hlsearch

"モード表示をOFFset noshowmode

" クリップボードset clipboard&
set clipboard^=unnamedplus

"Don't autofold anythingset foldlevel=100"対応括弧に<>を追加set matchpairs& matchpairs+=<:>"対応括弧をハイライト表示するset showmatch

"対応括弧の表示秒数を3秒にするset matchtime=3"改行時に前の行のインデントを計測set autoindent

"改行時に入力された行の末尾に合わせて次の行のインデントを増減するset smartindent

"新しい行を作った時に高度な自動インデントを行うset smarttab

"タブをスペースに変換set expandtab

"ファイル上のタブ文字の見た目の幅set tabstop=4"自動インデント時に挿入されるスペース量set shiftwidth=2"tabを押した時に挿入されるスペース量set softtabstop=2"高速ターミナル接続を行うset ttyfast

"マクロなどの途中経過を描写しないset lazyredraw

"カーソルの形指定set guicursor=v:block-Cursor/lCursor-blinkon0,n-i-c-ci:ver50-Cursor/lCursor,r-cr:hor20-Cursor/lCursor

"タブ、空白、改行の可視化set list
set listchars=tab:>.,trail:_,eol:,extends:>,precedes:<,nbsp:%

"ファイルを開いたときにタブ文字があったらスペースに変換
autocmd BufNewFile,BufRead * set expandtab
autocmd BufNewFile,BufRead * retab"ファイルタイプ
autocmd FileType vue syntax sync fromstart
autocmd FileType eruby syntax sync fromstart
autocmd BufNewFile,BufRead *.{html,htm}setfiletype=html
autocmd BufNewFile,BufRead *.html.erb setfiletype=html.eruby
autocmd BufNewFile,BufRead *.{pug*}setfiletype=pug
autocmd BufNewFile,BufRead *.{jade*}setfiletype=pug
autocmd BufRead,BufNewFile *.scss setfiletype=sass
autocmd BufRead,BufNewFile *.json setfiletype=json
autocmd BufRead,BufNewFile *.md setfiletype=markdown
autocmd BufRead,BufNewFile *.rb setfiletype=ruby
autocmd BufRead,BufNewFile *.slim setfiletype=slim
autocmd BufRead,BufNewFile *.js setfiletype=javascript
autocmd BufRead,BufNewFile jquery.*.js setfiletype=javascript syntax=jquery
autocmd BufRead,BufNewFile *.vue setlocalfiletype=vue.pug.javascript.css
autocmd BufReadPost * if line("'\"")>1&& line("'\"")<= line("$")| exe "normal! g`\""

mapping.vim

~/.vim/userautoload/init/mapping.vim
"prefix
nnoremap FF <C-w>"Escape
inoremap ff <Esc>
vnoremap ff <Esc>"ノーマルモードで行のどこにいても改行
nnoremap <CR> A<CR><Esc>"上スライド
nnoremap MM ddkkp

"下スライド
nnoremap mm ddp

"行複製
nnoremap tt Yp
vnoremap tt yP

"shift+dでvisualモードで単語選択
nnoremap D viw

"閉じ括弧自動保管
inoremap {{}<LEFT>
inoremap [[]<LEFT>
inoremap (()<LEFT>" inoremap < <><LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>"カーソル上の単語検索
nnoremap <C-j>g*:noh<Enter>
nnoremap <C-k>g#:noh<Enter>"ウインドウサイズ変更"カレントウインドウの幅を増やす
nnoremap ><C-w>5>"カレントウインドウの幅を減らす
nnoremap <<C-w>5<"ハイライト切り替え
nnoremap <F3>:set hlsearch!<CR>"ハイライト消す
nnoremap noh:noh<CR>"タブリファクタリング
nnoremap tab:set expandtab<Enter>:retab<Enter>:w<Enter>"設定ファイル読み込み
nnoremap <F5>:source ~/.config/nvim/init.vim<Enter>
nnoremap sou :source ~/.config/nvim/init.vim<Enter>"文頭・文末
nnoremap H ^
vnoremap H ^
nnoremap L $
vnoremap L $

" fzfショートカット
nnoremap gr:Ag<CR>

vimのステータスラインに時間を表示する

$
0
0

はじめに

最近vimを使い始めたばかりですが、vimを使いやすくするための設定を探しては導入しています。
ステータスラインをかっこよくしてくれるプラグインlightlineを使った環境で時間も表示してみました。

環境

  • neovim
  • dein

方法

関数を用意してligjtlineのコンポーネントとして呼び出す。

時間取得
function!g:Date()return strftime("%H:%M")endfunction
設定
'component_function':{'date':'Date',

シンプルな使用例も置いておきます。

dein.toml
[[plugins]]
repo ='itchyny/lightline.vim'
hook_add ='''
 letg:lightline={ \'colorscheme':'wombat',  \'active':{  \'left':[  \['mode','paste'],  \['readonly','filename','modified'],  \],  \'right':[  \['lineinfo'],  \['percent'],  \['charcode','fileencoding','date'],  \]  \},  \'component_function':{  \'date':'Date',  \},  \'component_expand':{  \},  \'component_type':{  \},  \}function!g:Date()return strftime("%H:%M")endfunction'''

スクリーンショット 2019-05-28 20.32.29.png

終わりに

実は導入に手こずってしまったのですが会社の先輩にフォローしていただきました!
vimmer優しい!

Spacemacsはいいぞ

$
0
0

Spacemacs is なに?

  • Emacsディストリビューション。Spacemacsよりも軽量なものにDoom Emacsなんかがあったりする。
  • Vimの秀逸な入力インターフェイスにEmacsの強力な拡張性を併せ持つそれぞれのいいとこ取りのエディタ。

メリット

  • スペースキーを起点としたコマンドが秀逸。スペースキーを押した時点で エディタの下に次のキーの候補と何のコマンドかを表示してくれて親切。
  • デフォルトで多くレイヤーが用意されていて、.rb.pyなどの拡張子を初めて開く場合、最初にawesome-emacsに乗っているようなモジュールを入れるか聞いてくれるので言われるがままに入れとけばまず困らない。
  • 補完が結構効く。仕事でRubyを書いていてRubyMineでは設定が悪いのか全然補完してくれなかったものがSpacemacsでは補完してくれるようになってRubyMineやめた。Robeすごい。
  • Emacsの豊富な既存のモジュールをほぼそのまま使える。
  • themes-megapackレイヤーを入れれば有り余るほどテーマが入るので、私みたいに定期的にテーマを変えたい人にはありがたい。テーマの変更は設定ファイルからできる他にSpace T sで簡単に変更できる。

デメリット

  • 情報が少ないのでSpacemacs固有の問題にぶち当たったら解決するのが結構大変らしい
  • 立ち上げてしまえばサクサクだが、やはり素のEmacsやVimやVSCodeと比べて起動が遅い。(それでもRubyMineやその他IDEよりはずっと速い)

導入手順

私はmacOSを使っているためmacOSでの導入手順を書いておきます。その他OSの方はGithubのREADMEを参照してください。

また、すでにemacsを使っている方は~/.emacs.dのバックアップを忘れずにしてください。

$ brew tap d12frosted/emacs-plus
$ brew install emacs-plus
$ brew linkapps emacs-plus
$ git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

よく使うコマンド

  • .rbファイルを開いた状態でSpace m ' : Robe(コードナビゲーション、ドキュメント検索、オートコンプリート)の起動
  • Space p f : プロジェクト内のファイル検索
  • Space / : プロジェクト内のテキスト検索
  • Space f f : ファイル検索
  • Space T T : エディタの透過調整
  • Space g b : git blame
  • Space T s : エディタのテーマ変更
  • Space w - : エディタの水平分割
  • Space w v : エディタの垂直分割
  • Space w w : 次のウィンドウに移動
  • Space {0~9} : 指定した数字のウィンドウに移動
  • Space p t : プロジェクトツリー(Treemacs)

coc.nvim, neovim0.4.0 floating window

$
0
0

昨日typescriptをペアプロで教えてもらっているときにIDEだとここに型の説明でるからわかり易いということを言われた為ぼくは明日からIDEに移り、、、ません。(理由は察し、、早くて楽チンだから)
補完だけじゃなく、lsp対応してさらに説明も表示させちゃいましょう。

demo2.gif

node.js

rm-rf ~/.yarn/
curl -sL install-node.now.sh/lts | sh
curl --compressed-o--L https://yarnpkg.com/install.sh | zsh

~/.config/nvim/dein.toml

[[plugins]]repo='neoclide/coc.nvim'build='coc#util#install()'hook_add='source~/.config/nvim/coc-setting.vim'

~/.config/nvim/coc-setting.vim

" coc.nvim" if hidden is not set, TextEdit might fail.set hidden

" Some servers have issues with backup files, see #649set nobackup
set nowritebackup

" Better display for messagesset cmdheight=2" Smaller updatetime for CursorHold & CursorHoldIset updatetime=300" don't give |ins-completion-menu| messages.set shortmess+=c" always show signcolumnsset signcolumn=yes

" Use tab for trigger completion with characters ahead and navigate." Use command ':verbose imap <tab>' to make sure tab is not mapped by other plugin.
inoremap <silent><expr><TAB>      \ pumvisible() ? "\<C-n>":      \<SID>check_back_space() ? "\<TAB>":      \ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>":"\<C-h>"function!s:check_back_space() abort
  letcol=col('.')-1return!col|| getline('.')[col-1]=~# '\s'endfunction" Use <c-space> to trigger completion.
inoremap <silent><expr><c-space> coc#refresh()" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current position." Coc only does snippet and additional edit on confirm.
inoremap <expr><cr> pumvisible() ? "\<C-y>":"\<C-g>u\<CR>"" Use `[c` and `]c` to navigate diagnostics
nmap <silent>[c<Plug>(coc-diagnostic-prev)
nmap <silent>]c<Plug>(coc-diagnostic-next)" Remap keys for gotos
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent>gr<Plug>(coc-references)" Use K to show documentation in preview window
nnoremap <silent> K :call<SID>show_documentation()<CR>function!s:show_documentation()if(index(['vim','help'],&filetype)>=0)
    execute 'h '.expand('<cword>')elsecall CocAction('doHover')endifendfunction" Highlight symbol under cursor on CursorHold
autocmd CursorHold * silentcall CocActionAsync('highlight')" Remap for rename current word
nmap <leader>rn <Plug>(coc-rename)" Remap for format selected region
xmap <leader>f<Plug>(coc-format-selected)
nmap <leader>f<Plug>(coc-format-selected)

augroup mygroup
  autocmd!" Setup formatexpr specified filetype(s).
  autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')" Update signature help on jump placeholder
  autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
augroup end" Remap for do codeAction of selected region, ex: `<leader>aap` for current paragraph
xmap <leader>a<Plug>(coc-codeaction-selected)
nmap <leader>a<Plug>(coc-codeaction-selected)" Remap for do codeAction of current line
nmap <leader>ac  <Plug>(coc-codeaction)" Fix autofix problem of current line
nmap <leader>qf  <Plug>(coc-fix-current)" Use `:Format` to format current buffer
command!-nargs=0 Format :call CocAction('format')" Use `:Fold` to fold current buffer
command!-nargs=? Fold :call     CocAction('fold',<f-args>)" Add diagnostic info for https://github.com/itchyny/lightline.vimletg:lightline={      \'colorscheme':'wombat',      \'active':{      \'left':[['mode','paste'],      \['cocstatus','readonly','filename','modified']]      \},      \'component_function':{      \'cocstatus':'coc#status'      \},      \}" Using CocList" Show all diagnostics
nnoremap <silent><space>a:<C-u>CocList diagnostics<cr>" Manage extensions
nnoremap <silent><space>e:<C-u>CocList extensions<cr>" Show commands
nnoremap <silent><space>c:<C-u>CocList commands<cr>" Find symbol of current document
nnoremap <silent><space>o:<C-u>CocList outline<cr>" Search workspace symbols
nnoremap <silent><space>s  :<C-u>CocList -I symbols<cr>" Do default action for next item.
nnoremap <silent><space>j:<C-u>CocNext<CR>" Do default action for previous item.
nnoremap <silent><space>k:<C-u>CocPrev<CR>" Resume latest coc list
nnoremap <silent><space>p:<C-u>CocListResume<CR>
:checkhealth
health#coc#check
========================================================================
  - OK: Environment check passed
  - OK: Javascript bundle found
  - OK: Service started

~/.config/nvim/coc-settings.json

:CocConfig
{//設定}

coc.nvim Extensions

:CocInstall coc-<インストールしたいもの>

現在インストールされているプラグインリスト

:CocList extensions

neovim0.4.0 floating window

brew unlink neovim
brew install neovim --HEAD

~/.config/nvim/init.vim

" denite
nmap ; :Denite buffer -split=floating -winrow=1<CR>
nmap <leader>t:Denite file/rec-split=floating -winrow=1<CR>
nnoremap <leader>g:<C-u>Denite grep:.-no-empty -mode=normal<CR>
nnoremap <leader>j:<C-u>DeniteCursorWord grep:.-mode=normal<CR>

vimコマンド(自分用)

$
0
0

使い始めた理由

仮想環境(GCEとか・・・)でファイル共有面倒すぎてvim使いになることを決心

vim導入(ubuntu/linux)

sudo apt-get install vim

コマンド一覧

コマンド内容
vim ~~~~にファイルパスでvimが使えるようになる

escを押した状態で使うコマンド(最初開いたときはこの状態)

コマンド内容
vim ~~~~にファイルパスでvimが使えるようになる
:wq保存
:q!保存しないで終了
gg先頭にいく
G最後の行に行く
2G2行目に行く(数字変えると何行目にもいける)
dd行削除
2dd2行削除(数字変えると何行でも削除できる)
w単語移動
$行末に移動
i挿入モード(戻るときはesc)
vビジュアルモード(戻るときはesc)

自分用勉強メモ10日目

$
0
0

tips

ブラウザでUser Agentを変更したいとき

CTFの問題を解いていて,User AgentをGooglebotに偽装したかった.
Firefoxだとアドオンを入れる必要があるらしい.
Chromeで変更する手順を見つけたので参考にした.

参考:Google ChromeでUserAgentを変更する

  1. Developer Toolsを開く (右クリックで「検証」)
  2. More ToolsからNetwork conditionsを開く
  3. select automaticallyのチェックを外す
  4. 好きなUserAgentに変える

Ubuntu19.04でvimのシンタックスハイライトが機能しなかった

Ubuntuが最小構成でインストールされていた場合,Vimも最小構成になっていた.
自分の場合はaptでVimをインストールし直したらシンタックスハイライトが使えるようになった.

# apt install vim

調べた知識

バイナリ解析で役に立つツール

pwntools

CTF用のPythonライブラリ.
pip install pwnでインストールできる.
p32という関数を使えば,数値を32bitのリトルエンディアンに変換してくれる.
例:p32(0x11223344)

checksec

実行ファイルのセキュリティ機構を表示してくれるシェルスクリプト.
以下からダウンロードできる.
slimm609/checksec.sh

gdb-peda

gdbの拡張版.
以下からインストールできる.
longld/peda

readelf

Linuxのコマンド.
ELFの情報を表示する.

rp++

実行ファイル中のROP Gadgetを表示する.
以下からダウンロードできる.
0vercl0k/rp

ELFのセキュリティ機構

RELRO(RELocation Read-Only)

ELFのセクションを読み込み専用にする.
以下の2つがある.

  • Partial RELRO
  • Full RELRO

GCCのデフォルトではpartialになっている.
partialであればGOT上書き攻撃が可能.

カナリア

SSP(Stack Smashing Protector)というものがある.
ローカル変数とリターンアドレスの間にカナリア(canary)と呼ばれる値を設定し,関数終了時にそれが変更されているかどうかをチェックする.
これにより,スタックオーバーフローが発生していないか確認できる.

NXビット(No eXecute)

メモリをコード領域とデータ領域に分け,後者に特別なビットを付与し,実行されることを防ぐ.
WindowsではDEP(Data Execution Prevention)という.

PIE(Position-Independent Executable)

実行コード内のアドレス参照をすべて相対アドレスで行う.
これにより,実行ファイルがメモリ上のどこに展開されても正常に実行できる.

ASLRとの違い

ランダム化する部分が異なる.

  • ASLR: 共有ライブラリやスタック
  • PIE: 実行ファイル

Ack.vim で最初の検索結果を自動でウインドウに開かないようにする

$
0
0

はじめに

Vim 上で grep 検索をかけるとき、ack.vimを使っているのですが、自動で最初の検索結果がウインドウで開いてしまうのに違和感を感じていました。

その挙動を OFF にする方法を調べたので、この記事に簡単にまとめます。

tl;dr

:Ackの代わりに :Ack!を使うだけで OK でした。

:help Ackの結果を引用します。!をつけることで、最初の検索結果にジャンプする挙動を OFF に出来るようです。

:Ack[!] [options] {pattern} [{directory}]                               *:Ack*

    Search recursively in {directory} (which defaults to the current
    directory) for the {pattern}.  Behaves just like the |:grep| command, but
    will open the |Quickfix| window for you. If [!] is not given the first
    occurrence is jumped to.

より便利にするために

自動で最初の検索結果をウインドウに開く挙動を OFF にする方法はわかったのですが、定常的にこの挙動を OFF にしたいと思っていました。

どうすればいいかを調べたところ、 Ack.vim の READMEに Tips が載っていたので、引用します。

以下を自分の .vimrcに書くと良いとのことでした。

cnoreabbrev Ack Ack!
nnoremap <Leader>a:Ack!<Space>

以下、それぞれのコマンドの意味を調べました。

cnoreabbrev Ack Ack!について

cnoreabbrevは、分解すると以下のような意味になります。

  • c:コマンドラインモード
  • nore: 非再帰的
  • abbrev:短縮入力

つまり、コマンドラインモードで Ackと入力したら、自動で Ack!と補完されるようになります。

nnoremap <Leader>a :Ack!<Space>について

nnoremapは、分解すると以下のような意味になります。

  • n:ノーマルモード
  • noremap:非再帰的

<Leader>a :Ack!<Space>は、<Leader>aと入力すると、:Ack!<Space>という入力に変換します。

終わりに

インストールしているだけのプラグインでも、少し調べることで便利な使いかたを知れたり、vim のコマンドについて知ることができたりして良いなと思ってます。

簡単にではありますが、コツコツ調べていきたいなと思います。

参考 URL

Common LispからVimを起動する

$
0
0

概要

Common LispからVimを起動してGitでcommitするときのあの動作を再現する。

前提

  • OS : Ubuntu 18.04.1 LTS
  • 処理系 : SBCL 1.4.5.debian
  • Vim : Vim 8.0

実装方法

起動するだけ

(sb-ext:run-program"/usr/bin/vim"nil:outputt:inputt)

ファイルを開いて起動

(sb-ext:run-program"/usr/bin/vim"(list"/path/to/some/file"):outputt:inputt)

終了コードを取得する

:wq:qで終わったときは0が返る。
:cqで終わったときは1が返る。

(sb-ext:process-exit-code(sb-ext:run-program"/usr/bin/vim"nil:outputt:inputt))

用途

例えばGitのようにコミットメッセージのような文章を入力させたい場合に使える。
y/nの質問のような単純なものであれば標準入力からそのまま入力させてもいいけど、
テキストで色々な情報を見せながら、いくつかの項目を入力させたい場合とかに良い。

改善するべき点

Vimのパスを絶対パスで指定しているので環境によっては動かないかもしれない。
この点は改善が必要だと思う。

【tsuquyomi】TsuGeterrコマンドで出力されるエラーメッセージを日本語化する

vimのカラースキームでLaTeXのコードを彩る、carbonpaper.vim

$
0
0

なにそれ

最強のvimプラグインcarbonpaper.vimを使うと、、、

このvimのコードが

carbonpaper_vim.png

そのままの色(カラースキーム: hybrid)でLaTeXに!

carbonpaper_dark.png

あるいはこんな感じにも!

carbonpaper_light.png

(カラースキーム: PaperColor

概要

カーボン紙です。vimのカラースキームをLaTeXに転写します。
s417-lama/carbonpaper.vim

LaTeXのlistingsでソースコードを貼りたい、しかし

  • わかりにくい
  • そのままだときれいじゃない
  • シンタックスハイライティングがサポートされている言語が少ない

といった状況。

例えば上の例みたいなElixirのコードをTeXに貼りたい時、vimのカラースキームのまま貼り付けられると嬉しい。
LaTeX用の文法定義を書いて、、、みたいなことをすればハイライトできるかもしれないが、そんなことを新しい言語が出るたびにやりたくない。
じゃあせっかくvimでハイライトされているのだからそれを使えば良い、という流れで作成。

あとは単純に、お気に入りのカラースキームでコードがPDF化されるのは嬉しい。

いんすとーる

プラグインマネージャに応じて適当に。
dein.vimなら

call dein#add('s417-lama/carbonpaper.vim')

使い方

  1. vimのvisualモードでコードを選択
  2. :CarbonPaperコマンドを実行(visualモード中では:'<,'>CarbonPaperでもいい)
  3. 適当な名前を付けて変換されたファイル(hoge.tex)を保存
  4. LaTeXのコードにファイルを挿入(\input hoge.tex
  5. LaTeXをコンパイル

生成されるhoge.texはただのLaTeXのlistingsなので、そのまま\inputで挿入するだけで良い。

carbonpaper_default_all.gif

こんな感じ。

LaTeXには以下のようなことを書いておくといい感じになる。

\documentclass[a4paper]{scrartcl}% フォントはinconsolataがおすすめ\usepackage[T1]{fontenc}\usepackage{inconsolata}% 必須\usepackage{listings}\usepackage{xcolor}% 普通のlistingsと同じように好みに応じて変える\lstset{
  basicstyle=\ttfamily,
  basewidth=0.5em,
  numbers=left,
  numberstyle=\scriptsize,
  numbersep=1em,
  frame={tb},
  framexleftmargin=0.5em,
  showstringspaces=false,
}\title{carbonpaper.vim Demo}\date{}\begin{document}\maketitle% ここ大事\input quicksort.exs.tex

\end{document}

デモのソースコードは
https://github.com/s417-lama/carbonpaper.vim/tree/master/samples/demo
にも。

また、vimの矩形選択(Ctrl-V)で一部のみを選択してLaTeX化することも可能。

carbonpaper_papercolor_part.gif

この例を見ると分かるように、実は現在のcolorschemeでなくても別のcolorschemeを指定することで変換可能。説明は以下。

諸々の設定

colorscheme

普段使いのカラースキームではないやつをcarbonpaper.vimでは使いたい場合は以下のように指定。

letg:carbonpaper#colorscheme='PaperColor'

PaperColorはオススメです)

background

vimのbackgroundオプション(lightdarkか)。
これもcolorschemeと同様に普段とは別のものを指定可能。LaTeXだとlightが相性が良い?

letg:carbonpaper#background ='light'

set_background_color, set_foreground_color

\lstsetとかで元々定義されているデフォルトの色を上書きしたくない場合は0を設定。
つまりvimの地の文の色をそのまま使いたいなら1、そうでないなら0。
個人的にはset_background_colorを0にしてbackgroundlightにするのが好き。

letg:carbonpaper#set_background_color =0letg:carbonpaper#set_foreground_color =0

(default: 1)

highlight_bold

色のついたテキストを全て太字(\bfseries)にする。

letg:carbonpaper#highlight_bold =1

(default: 0)

ドキュメント

:h carbonpaper

をvimで実行すると読める。

PDF版は
carbonpaper.vim User Guide
に。
実はこれもvimのhelpをcarbonpaper.vimでPDFに変換したもの。

おわりに

LaTeXでドキュメントを作ったり、beamerでプレゼンスライドを作る際に使ってもらえればいいなあ、と思って作りました。
もしかするとpandasでごにょごにょするとLaTeXから色々なフォーマットに変換できるかもしれない。

自分の環境以外では動作確認ができていないので、ぜひフィードバックください。PRも歓迎です。
s417-lama/carbonpaper.vim

(おまけ)中では何が起こっているの?

では実際に生成されたLaTeXコードを見てみましょう。

\definecolor{cp-Number}{HTML}{d75f00}\definecolor{cp-elixirVariable}{HTML}{005f87}\definecolor{cp-Operator}{HTML}{0087af}\definecolor{cp-Normal}{HTML}{444444}\definecolor{cp-elixirModuleDefine}{HTML}{d70087}\definecolor{cp-elixirBlockDefinition}{HTML}{d70087}\definecolor{cp-elixirAtom}{HTML}{005f87}\definecolor{cp-elixirAlias}{HTML}{005faf}\definecolor{cp-elixirDefine}{HTML}{d70087}\definecolor{cp-elixirModuleDeclaration}{HTML}{0087af}\definecolor{cp-elixirFunctionDeclaration}{HTML}{0087af}\lstdefinestyle{carbonpaper}{language=,moredelim=[is][\color{cp-Number}\bfseries]{(<cp--b>*\#Number*}{\#*<cp--e>)},moredelim=[is][\color{cp-elixirVariable}\bfseries]{(<cp--b>*\#elixirVariable*}{\#*<cp--e>)},moredelim=[is][\color{cp-Operator}\bfseries]{(<cp--b>*\#Operator*}{\#*<cp--e>)},moredelim=[is][\color{cp-Normal}]{(<cp--b>*\#Normal*}{\#*<cp--e>)},moredelim=[is][\color{cp-elixirModuleDefine}\bfseries]{(<cp--b>*\#elixirModuleDefine*}{\#*<cp--e>)},moredelim=[is][\color{cp-elixirBlockDefinition}\bfseries]{(<cp--b>*\#elixirBlockDefinition*}{\#*<cp--e>)},moredelim=[is][\color{cp-elixirAtom}\bfseries]{(<cp--b>*\#elixirAtom*}{\#*<cp--e>)},moredelim=[is][\color{cp-elixirAlias}\bfseries]{(<cp--b>*\#elixirAlias*}{\#*<cp--e>)},moredelim=[is][\color{cp-elixirDefine}\bfseries]{(<cp--b>*\#elixirDefine*}{\#*<cp--e>)},moredelim=[is][\color{cp-elixirModuleDeclaration}\bfseries]{(<cp--b>*\#elixirModuleDeclaration*}{\#*<cp--e>)},moredelim=[is][\color{cp-elixirFunctionDeclaration}\bfseries]{(<cp--b>*\#elixirFunctionDeclaration*}{\#*<cp--e>)}}\begin{lstlisting}[style=carbonpaper]
(<cp--b>*#elixirModuleDefine*defmodule#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#elixirModuleDeclaration*Quicksort#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#elixirBlockDefinition*do#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#Normal*  #*<cp--e>)(<cp--b>*#elixirDefine*def#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#elixirFunctionDeclaration*sort#*<cp--e>)(<cp--b>*#Normal*([]            )#*<cp--e>)(<cp--b>*#Normal*, #*<cp--e>)(<cp--b>*#elixirAtom*do:#*<cp--e>)(<cp--b>*#Normal* []#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#Normal*  #*<cp--e>)(<cp--b>*#elixirDefine*def#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#elixirFunctionDeclaration*sort#*<cp--e>)(<cp--b>*#Normal*([pivot #*<cp--e>)(<cp--b>*#Operator*|#*<cp--e>)(<cp--b>*#Normal* rest])#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#elixirBlockDefinition*do#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#Normal*    #*<cp--e>)(<cp--b>*#Normal*{#*<cp--e>)(<cp--b>*#Normal*smaller#*<cp--e>)(<cp--b>*#Normal*, #*<cp--e>)(<cp--b>*#Normal*greater#*<cp--e>)(<cp--b>*#Normal*}#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#Operator*=#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#elixirAlias*Enum#*<cp--e>)(<cp--b>*#Operator*.#*<cp--e>)(<cp--b>*#Normal*split_with#*<cp--e>)(<cp--b>*#Normal*(#*<cp--e>)(<cp--b>*#Normal*rest#*<cp--e>)(<cp--b>*#Normal*, #*<cp--e>)(<cp--b>*#Operator*&#*<cp--e>)(<cp--b>*#Normal*(#*<cp--e>)(<cp--b>*#elixirVariable*&1#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#Operator*<#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#Normal*pivot#*<cp--e>)(<cp--b>*#Normal*))#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#Normal*    #*<cp--e>)(<cp--b>*#Normal*sort#*<cp--e>)(<cp--b>*#Normal*(#*<cp--e>)(<cp--b>*#Normal*smaller#*<cp--e>)(<cp--b>*#Normal*) #*<cp--e>)(<cp--b>*#Operator*++#*<cp--e>)(<cp--b>*#Normal* [#*<cp--e>)(<cp--b>*#Normal*pivot#*<cp--e>)(<cp--b>*#Normal*] #*<cp--e>)(<cp--b>*#Operator*++#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#Normal*sort#*<cp--e>)(<cp--b>*#Normal*(#*<cp--e>)(<cp--b>*#Normal*greater#*<cp--e>)(<cp--b>*#Normal*)#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#Normal*  #*<cp--e>)(<cp--b>*#elixirBlockDefinition*end#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#elixirBlockDefinition*end#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#Number*1#*<cp--e>)(<cp--b>*#Operator*..#*<cp--e>)(<cp--b>*#Number*1_000_000#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#Operator*|>#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#elixirAlias*Enum#*<cp--e>)(<cp--b>*#Operator*.#*<cp--e>)(<cp--b>*#Normal*shuffle#*<cp--e>)(<cp--b>*#Normal*()#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#Operator*|>#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#elixirAlias*Quicksort#*<cp--e>)(<cp--b>*#Operator*.#*<cp--e>)(<cp--b>*#Normal*sort#*<cp--e>)(<cp--b>*#Normal*()#*<cp--e>)(<cp--b>*#Normal*
#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)(<cp--b>*#Operator*|>#*<cp--e>)(<cp--b>*#Normal* #*<cp--e>)(<cp--b>*#elixirAlias*IO#*<cp--e>)(<cp--b>*#Operator*.#*<cp--e>)(<cp--b>*#Normal*inspect#*<cp--e>)(<cp--b>*#Normal*()#*<cp--e>)(<cp--b>*#Normal*#*<cp--e>)
\end{lstlisting}

分かりやすいですね。


【Vim】新しい Denite に爆速で対応する

$
0
0

Deniteの新しいバージョン v3が出ましたね! みんなもう早速更新して vimrc も5万行くらい書いてますよね!

この記事では変更内容を(勝手に)紹介しつつ、おすすめ設定も書いていきたいと思います。

Denite v3
DelBSPcFbe.gif

比較のために古いバージョンでほぼ同じことやってみました。

Denite v2
Y55Louv6UO.gif

違いがわかるでしょうか。見た目でいちばんの違いは、filtering(絞り込み)のためにキーを打つとき補完候補が出ていることです。これにより目当ての候補にたどり着きやすくなっています。

以下、見ただけではわからない変更点も含めて書いていきましょう。

変更点その1 標準ではキーマッピングが提供されなくなった

いちばん重要な変更点です。インストールした時点では filtering を開始するマッピングすら存在しません。ドキュメントを読んで設定しましょう。

" 一部を抜粋しています。完全版はドキュメントを参照してください
autocmd FileType denite calls:denite_my_settings()function!s:denite_my_settings() abort
  " filtering ウィンドウを開く
  nnoremap <silent><buffer><expr>i       denite#do_map('open_filter_buffer')" Denite を閉じる
  nnoremap <silent><buffer><expr>q       denite#do_map('quit')endfunction

Denite のメインウィンドウは deniteという filetype を持っています。そのウィンドウでのみ使えるマッピングを設定しているわけですね。

変更点その2 filtering のためにコマンドラインではなく、専用のウィンドウを使うようになった

今までは、filtering を開始するとき画面最下部のコマンドラインを利用していました。今回のバージョンでは代わりに、メインウィンドウの下側に新しいウィンドウを開くように UI が変わりました。

これにより、以下のような利点がもたらされます。

補完が効く!

スクリーンショット 2019-06-01 17.15.57.png

filtering ウィンドウで開いているのは denite-filterという filetype を持つ普通の buffer です。Denite にはこの filetype で使うための Deoplete source が用意されており、選択対象を絞り込むための文字列を補完候補として出してくれます。これが思いの外快適で、少ないキーストロークで目的の候補に辿り着けるようになりました。

マッピングなどのカスタマイズが自由にできる!

普通の buffer であるということは、自由なカスタマイズが可能になったということでもあります。標準では Enterにのみ、「入力を終えて filtering ウィンドウを閉じる」というマッピングが提供されています。必要に応じて設定してみましょう。

autocmd FileType denite-filtercalls:denite_filter_my_setting()function!s:denite_filter_my_setting() abort
  " 一つ上のディレクトリを開き直す
  inoremap <silent><buffer><expr><BS>    denite#do_map('move_up_path')" Denite を閉じる
  inoremap <silent><buffer><expr><C-c>   denite#do_map('quit')
  nnoremap <silent><buffer><expr><C-c>   denite#do_map('quit')endfunction

ここでは僕が実際に利用しているマッピング(の一部)を載せました。ただ基本的に、filtering ウィンドウは絞り込みのためだけに使うことを想定されています。あまり複雑なことはできないので注意しましょう。

[Neovim] floating window 利用時に視線の移動が少なくなった

Neovim に搭載された floating windowという機能をご存知でしょうか? 従来の Denite は起動すると画面下部に候補を羅列するため、どうしても視線を下に動かさざるを得ませんでした。画面の大きな端末ではこれが不便だったんですよね。floating window を利用することにより、画面上の好きな場所に Denite を登場させることができるようになりました。

ただこれまでは、filtering のためにどうしても視線の移動が発生していました。これが今バージョンでは軽減されたのです。

Denite v2Denite v3
denitev2denitev3

こうしてみるとスッキリしてますね!

その他の注意点

今回のバージョンでは内部構造にもかなり手が入っています。上述のマッピング以外、ユーザーが設定を変更すべき点はないのですが、もし Denite と連携するようなプラグインを使っている場合はそちらで修正が必要な場合があります。

具体的には、ステータスラインに関する変更です。Denite はメインウィンドウ、filtering ウィンドウそれぞれに特殊なステータスバーを表示しています。

スクリーンショット_2019-06-01_15_58_44.png

これが AirlineLightlineといったプラグインを使っているとバッティングしてしまいます。すでに Airline には Denite v3 用の修正が入っていますので、最新版にするとエラーが起きないでしょう。僕は Lightline を使っているのですが、カスタムテーマとして公開している lightline-delphinusでも対応しておきました(修正差分の PR)。

スクリーンショット 2019-06-01 16.17.46.png

こんな感じです。ただ floating window を使っている場合は、そもそもステータスラインが存在しません。これは Neovim の仕様ですので、設定ではどうしようもなさそうです。

まとめ

最近 VSCode に押され気味な Vim 界ですが、特に Neovim の登場以降、エンドユーザーにも影響のあるような UI/UX の改善が進んでいます。今回の Denite v3 は最近の流れを受けた、その集大成といっていいでしょう。

上に挙げた変更点を含め、Denite v3 に対応するために修正した dotfiles を以下に PR として記録しています。新しい Denite を使う時に参考にしてください。

vim から git 操作できる denite の source を作りました

$
0
0

はじめに

この記事は denite.nvim向けの git ソースを作ったのでそれの説明を行う記事です。まだまだですが基本的な操作はだいぶできるようになってきたので宣伝です。

対象読者

  • vim ユーザ
  • denite.nvim を利用している(or これから利用する)
  • vim からの git 操作にめんどくささを感じている
    • そして、その解決を「denite.nvimの UI でやりたい!」と思っている

前提

vim における git 関連プラグインは非常に数が多く、denite-gitto よりも高機能で使いやすいものはたくさんあります。(gina.vim とかほんとすごいです。)
また、denite.nvim の UI で git 操作できる別プラグインも既にあったりします。(じゃあなんで作ったの?って話なんですが。。。git 操作ってめちゃくちゃやるので、自分好みの UI がよかったのかもしれません。)

インストール

お好みのプラグインマネージャでインストールしてください。
下記は dein.nvim を利用している前提のサンプルです。

call dein#add('Shougo/denite.nvim') " denite.nvim 本体。v3 以降が必須。
  call dein#add('hrsh7th/vim-gitto') " git 関連操作を提供するプラグイン
  call dein#add('hrsh7th/vim-denite-gitto') " denite.nvim の source

利用方法

下記のマッピング一つだけで基本的な操作は全て可能です。git 関連操作のランチャーが立ち上がるイメージです。

デフォルトで statusbranchlogfetchが表示されており、場合によって下記のようなメニューが追加で表示されます。

  • push(未 push なコミットがある場合)
  • pull(リモートのほうが進んでいるとわかった場合)
  • set-upstream-to(upstream が未設定で同名のリモートブランチがある場合)
nnoremap git :<C-u>DeniteGitto gitto<CR>

※ もちろん、個別に nnoremap gits :<C-u>DeniteGitto gitto/status<CR>などと書くこともできます。

その他

  • .gitの検出は DeniteGittoを実行したバッファから行われます。
    • この挙動を変更したい場合は g:gitto#config.get_buffer_pathを上書きすれば可能です。
  • DeniteGitto gittoを起動すると、statusbranchlogpushなどのメニューが表示されます。
    • statusからメニューに戻りたい場合は denite.nvimrestore_sourcesマップから行えます。これが激しく便利です。
  • なんと vim-plugin なのに doc がないです。
    • 現状、リポジトリの README.md に説明がちょろっとあるだけです。
    • これはボコボコにされかねない由々しき事態なので時間を見つけて doc を書きます。(本当に vim 周りのエコシステムはドキュメントが充実していて素晴らしいなと思います。思ってはいます。。。)

スクショ

DeniteGitto gitto

DeniteGitto gitto実行後の状態
スクリーンショット 2019-05-17 14.44.40.png

DeniteGitto gitto -> status

statusを選択した状態。
denite.nvimの機能である restore_sourcesを実行すると前の画面に戻れる。

スクリーンショット 2019-05-17 14.46.20.png

statusから変更差分を表示

デフォルトアクションが diffになっているので、<CR>で別タブで vimdiff が表示される。

スクリーンショット 2019-05-17 14.48.15.png

statusから commitアクションを実行

statusの一覧からコミットしたい対象を選択して commitアクションを実行する。

スクリーンショット 2019-05-17 14.49.21.png

免責事項

ご利用の際は自己責任でお願いします :bow:

vim プラグイン 入れ方 (dein.vimの導入方法から)

$
0
0

まえおき

なんかようやくvimのプラグインの入れ方を理解できたので、それについて書いていきます。
Unix系(Mac, Linux)を使っている前提で話が進みます。

プラグインマネージャー(dein)の導入

私は「dein」を使うことにしました。(なんか他にも色んなプラグインマネージャーがあるらしい)
早速入れていきましょう。
基本的にdein.vimに書いてある通りにやります。英語がわからん人のために、やり方をここにも書いておきます。

(1) 下のスクリプトを端末(コマンドプロンプト、ターミナル)で走らせろ

これと
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh

これ
sh ./installer.sh ~/.cache/dein

を走らせると、deinがpcに入ります。場所は上にも書いてありますが、~/.cache/deinです。
隠しファイルも見える設定にしないと多分見えません。

(2) ~/.vimrcに下の内容を書け

vim ~/.vimrcと端末に打ち込んで、中にこれをコピペしましょう。

if &compatible
  set nocompatible
endif
" Add the dein installation directory into runtimepath
set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim

if dein#load_state('~/.cache/dein')
  call dein#begin('~/.cache/dein')

  call dein#add('~/.cache/dein/repos/github.com/Shougo/dein.vim')
  call dein#add('Shougo/deoplete.nvim')
  if !has('nvim')
    call dein#add('roxma/nvim-yarp')
    call dein#add('roxma/vim-hug-neovim-rpc')
  endif

  call dein#end()
  call dein#save_state()
endif

filetype plugin indent on
syntax enable

「えぇ〜!? もう中にちょっとした設定書いちゃっただよ〜…」って人は、その設定の上側にこれを置いてください。多分大丈夫です。僕のは動きました。僕のは。

(3) vimを開いて下のを打ってね

:call dein#install()って打ちます。これでdeinの導入、初期設定は終わりです。お疲れやまでした。

プラグインの導入

ぼくはここで引っかかりました。(アホなので)
とても簡単です。~/.vimrc をまた開いてください。そこに、

if &compatible
  set nocompatible
endif
" Add the dein installation directory into runtimepath
set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim

if dein#load_state('~/.cache/dein')
  call dein#begin('~/.cache/dein')

  call dein#add('~/.cache/dein/repos/github.com/Shougo/dein.vim')
  call dein#add('Shougo/deoplete.nvim')
  if !has('nvim')
    call dein#add('roxma/nvim-yarp')
    call dein#add('roxma/vim-hug-neovim-rpc')

   " ここに call dein#add('[入れたいプラグインのurl]') って入れてくだけ

  endif

  call dein#end()
  call dein#save_state()
endif

filetype plugin indent on
syntax enable

ね?簡単でしょう?
ちなみにdeinはGitHubのものなら、https://github.com/は省略できます。
つまり、Hogeさんのhuga.vimってプラグインを入れたいときは、
call dein#add('Hoge/huga.vim)ってな感じで追加してあげれば良い。便利^〜

入れたいプラグインを記述したら、保存して、vimに
:call dein#install()って打ち込みましょう。これで導入されます。やったあ!!

終わりに

単純に入れ方を雑に説明しただけなので、フォルダがどうなってる〜、とか、これこれこういうプラグイン入れると良いよ〜、っていうような内容は他のサイトにお任せします。(僕には何もわからないので)
プラグイン導入に詰まってしまった、僕みたいな人が救済されるといいなって思います。
では!!

プロキシ環境下でadd-apt-repositoryを通す方法

$
0
0

Vim8.0を入れたい

ubuntuでvimを入れる際は基本的には

$ sudo apt install vim

としてインストールすると思うのですが、これだとVim7.4になってしまいます。
ただ、私はvim8.0を使いたいので

$ sudo add-apt-repository -y ppa:jonathonf/vim

で非公式リポジトリを追加してから、インストールしています。
こうするとVim8.0をaptでインストールできるのはvimmerには有名な話。

会社でadd-apt-repositoryできない問題

ここで厄介なのが会社等のプロキシ環境下でadd-apt-repositoryをするとERRORで引っかかってしまい、リポジトリを追加できません。

$ sudo add-apt-repository -y ppa:jonathonf/vim
Cannot add PPA: 'ppa:~jonathonf/ubuntu/vim'.
ERROR: '~jonathonf' user or team does not exist.

このERRORが厄介なのがエラーメッセージ読んでも原因がさっぱりわからないところなんですよね。
そのため会社ではVim7.4を使ったり、Vim8.0をコンパイルしたりとごまかしながらVim生活を送っていました。

解決策

新しいPCをセットアップするたびに調べては挫折してを幾度も繰り返しているある時、急に原因が判明しました。
知ってしまえばとても単純な話だったのですが、sudoではユーザーがbash等で設定している環境変数が引き継がれないため、プロキシを突破できていないだけでした。

ということでsudoで環境変数を引き継がせるための引数Eを指定すればいいだけの簡単なお仕事でした。

$ sudo-E add-apt-repository -y ppa:jonathonf/vim

参考にさせて頂いたサイト

改めてsudoについて調べてみた

Vimにポップアップウィンドウが入りました

$
0
0

こんにちわ。
ゴリラ.vimを運営しているゴリラです。

Vim 8.1.1391でポップアップウィンドウという機能が入りました。
これは名前の通り、ポップアップウィンドウを出すという機能です。

現在も実装が進められていてまだ完成ではないのですが、良い感じになってきたので紹介していこうと思います。

どんな感じか?

こんな感じでポップアップウィンドウを出せます。

popup.gif

こちらはゴリラ製翻訳プラグインです。

翻訳結果をポップアップウィンドウに表示し、カーソルを動かしたら自動で閉じる様になっています。
わざわざバッファを作成して表示しなくて済むはめちゃくちゃ便利です。

ポップアップウィンドウの作り方

とっても簡単です。
これだけで作れます。

let winid = popup_create("hello gorilla",{})

第一引数は文字列、文字列の配列を渡します。
第二引数はポップアップウィンドウのオプションになります。

ポップアップウィンドウを閉じるにはpopupcpopup_close(winid)で閉じれます。

オプション

詳しくはヘルプを引いて頂いたほうがわかりやすいので、ここでは軽く紹介します。

オプション設定値説明
line1, "corsor+1"ポップアップの位置(横),"corsor+1"だと現在のカーソルから1セル下になります
col1,"cursor+1"ポップアップの位置(縦)、"cursor+1"だと現在のカーソルから1セル横になります
border[1,1,1,1]ポップアップをボーダーで囲う、数値はボーダーの太さになります。
moved"any","word"カーソルを動かしたときに自動で閉じるときに使用します

他にもfilterなどありますがここ割愛します。

最後に

ポップアップウィンドウは現在も絶賛実装中でまだまだ良くなっていきます。
今後が楽しみですね。

ちなみにvim-quickrunもポップアップウィンドウ対応していたので興味ある方はアップデートして試してみてください。

Viewing all 5728 articles
Browse latest View live


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