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

HomebrewでVimの最新版をインストール

$
0
0

しばらくSublimeTextを使っていたのだけれど、vimもまた使いたくなって最新版を入れ直しました。

環境

Mac:version 10.13.4
Homebrew:1.6.6

1.最新のvimをHomebrewで取ってくる。

$ brew install vim --with-override-system-vi

2.インストールしたvimのpathを確認する。

$ which vim
/usr/local/bin/vim

3.インストールしたvimのバージョン確認をする。

$ vim --version
VIM - Vi IMproved 8.1 (2018 May 17, compiled Jun  3 2018 15:50:08)

これでviを呼んだ時にvimが立ち上がります。


Vim ことはじめ

$
0
0

なんとなくVimを使ってみたくなったので、初学者が慣れるまでにやったことをまとめてみます。

Vimの特徴

  • マウスを使用しない(ように設計されている)。
  • カーソルキーを使わない。
  • コマンドを覚える必要がある。
  • 慣れればめちゃ便利(らしい)

なぜVim?

  • Linuxサーバー内だけで編集して実行できる
  • 幅広い拡張性
  • 起動が早い
  • (慣れれば)素早くファイルが編集できる
  • なんとなくかっこいい ..etc
    参考:なぜvimを使うのか

Vim使い方

コマンドの種類は無数にあるので、まずは以下で紹介するコマンドから使えるようになると良いと思います。

モードの切り替え

Vimには編集モードとコマンドモード(通常モード)があります。

モードコマンド
編集モード(カーソルの位置から)i
編集モード(カーソルの後ろから)a
編集モード(改行してカーソルの下から)o
編集モード(カーソルの位置から置換)R
コマンドモードEsc

終了コマンド

終了パターンコマンド
変更を保存せず終了:q!
変更を保存して終了:wq ( or ZZ )

:で始まるコマンドをexコマンドと呼びます。

カーソル移動

方向コマンド
h
k
l
j
単語ごとにカーソルを進めるw
単語ごとにカーソルを戻すb
行の最初へ0
行の最後へ$
次のページへctrl + f
前のページへctrl + b
ファイルの末尾へG
ファイルの頭へgg (or 1G)
n行目へジャンプngg (or nG)
前方検索/〇〇
後方検索?〇〇
(検索後)次の候補へn

カーソルの移動が早くできる=編集が早くできるなので、このあたりのコマンドはvimを使う上で超重要です。

ファイルを開いたときにとりあえず:set numberや:set autoindentコマンドを打っておくと編集が楽になるでしょう。

編集系コマンド

編集方法コマンド
一文字削除x
一語変更cw
一語変更(こっちの方が個人的にはよく使う)ciw
カーソル位置から行末まで変更c$
一語削除dw
カーソル位置から行末まで削除d$
一行コピー(ヤンク)yy
一行カットdd
ペーストp
直前のコマンド繰り返し.
アンドゥu
リドゥctrl + r
ビジュアルモードv
矩形選択ctrl + v
矩形選択後、挿入I or A(escで終了)

とりあえずチュートリアルを

上記のコマンドを使うことを意識してチュートリアルをやってみると良いと思います。
Macか大体のLinuxであれば以下のコマンドでvimのチュートリアルが始まると思います。

$ vimtutor

もしくはvimを起動して:Tutorialコマンドを(こちらであればWindowsでも動くと思います)

:Tutorial

vimをもっと便利に使うために

  • ホームディレクトリに.vimrcファイルを作る。
  • プラグインを導入する。
  • マクロを使う...etc

Vim8へ上げてdeinをインストール

$
0
0

Vim8+deinの環境を作る

vimにプラグインをインストールしようと調べてみたらdeinが良いらしい。
公式ページ見ながらインストールしたら軽くハマったので手順を記載。

dein.vimの要求環境

ここに要求環境が記載されている。
Vim 8以上でないと入れれないということで、まずVimをupdateする。
また、インストールは~/.cache/deinが一般的らしいのでそこを使う。

1. Vim 8のリポジトリ追加

curl -L https://copr.fedorainfracloud.org/coprs/mcepl/vim8/repo/epel-7/mcepl-vim8-epel-7.repo -o /etc/yum.repos.d/mcepl-vim8-epel-7 r
epo

2. Vim 8へupdate

yum update vim*

入れた後vim --versionで一応確認しておくと良いかも。

3. deinをインストール

ホームディレクトリに.cache/deinを作り、deinをインストールする

mkdir ~/.cache/dein
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh

これにより作成されたスクリプトを以下のように実行

$ sh ./installer.sh ~/.cache/dein

### 一部省略"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=/root/.cache/dein/repos/github.com/Shougo/dein.vim

" Required:
if dein#load_state('/root/.cache/dein')
  call dein#begin('/root/.cache/dein')" Let dein manage dein
  " Required:
  call dein#add('/root/.cache/dein/repos/github.com/Shougo/dein.vim')" Add or remove your plugins here:
  call dein#add('Shougo/neosnippet.vim')
  call dein#add('Shougo/neosnippet-snippets')

  " You can specify revision/branch/tag.
  call dein#add('Shougo/deol.nvim', {'rev': '01203d4c9'})" Required:
  call dein#end()
  call dein#save_state()
endif

" Required:
filetype plugin indent on
syntax enable" If you want to install not installed plugins on startup.
"if dein#check_install()"  call dein#install()
"endif

"End dein Scripts-------------------------


Done.
Complete setup dein!

上記のような結果が出るはず。
"dein Scripts-----から"End dein Scripts------の部分を
~/.vimrcにコピペして一度保存。

再度vimを立ち上げて:call dein#install()コマンドでdeinのインストール実行。

少し時間が掛かるが完了を示すメッセージが出る。

centosのデフォルトのvimで最新のdeinを使おうとしたらハマった話

$
0
0

環境

CentOS release 6.6 (Final)
vim 7.4.629
dein 1.5

概要

vimのプラグイン管理ツールのdeinの最新版(1.5)をCentOSのデフォルトのvimで使用したら使えなかった話です。

エラー内容

Error detected while processing function dein#begin..dein#util#_begin..dein#util#_error..<SNR>11_msg2list:
line    1:
E121: Undefined variable: v:t_list
E15: Invalid expression: type(a:expr) ==# v:t_list ? a:expr : split(a:expr, '\n')
Error detected while processing function dein#begin..dein#util#_begin..dein#util#_error:
line    1:
E714: List required
Press ENTER or type command to continue

調査

Undefined variable: v:t_listがエラーの内容らしい。
調べたところvim7.4.2071からされたのがv:t_xxxらしい。CentOS6系や7系のデフォルトだとこれより古いバージョンが入っているのが原因みたいです。
(最新のCnetOSバージョンまで調べた訳ではないので例外はあるかもしれません)

結論

どうやらvim7.4のサポートをしなくなったらしいです。vim8系であればサポートがあるらしいです。
https://github.com/Shougo/dein.vim/issues/250
もしかしたら最新のvim7.4系なら動くかもしれませんが未検証&動いても今後のサポートがあるかは不明です。

解決方法

deinをインストールしたディレクトリに移動指定以下を実行。

git checkout 1.0

deinを古いバージョンにすることでしのぎました。(投稿時の最新のtagは1.5)

KaoriYa - Vimの[:Tutorial]を再現してみる

$
0
0

Vimをメインエディタにし続けるために一念発起してキーボードをUSに買い替えました。HHKBlite2から、ノートパソコンでずっとお世話になっていた赤鼻のニクい奴に変わりました。「もういいアイソレーションも出てるから大丈夫」と信じてたんですけど、やっぱりアイソレーション向いてません…

さておき、人生初のUSキーボードなので記号打ちに慣れてないし、ことvimにおいて記号に慣れるのは必須課題でもあるわけで、」じゃあvimtutorやっておくかー」ということでラクに起動できるようにKaoriYa版vimでコマンド化されていた:Tutorialパク作ってみました。

もうバッチではso /tutor/tutor.vimあるんじゃねーの?

はい、基本それコピーして関数化すれば終わりっす。

vimtutor.vim
function!s:vimtutor(...) abort
    lets:ext=""ifa:0>0lets:ext=".".a:1elselets:lang=""::

おれは しょうきに もどった!

そもそもvimスクリプトなんだから関数化せんでもsourceで読み込んだらバッチ処理しませんか?

vimtutor.vim
function!s:vimtutor(...) abort
    let $TUTORCOPY = $VIMFILES.'/.tutor'ifa:0>0let $xx =a:1endifnew
    source $VIMRUNTIME/tutor/tutor.vimnew $TUTORCOPY
endfunction

command!-nargs=? -bang Tutorial calls:vimtutor(<f-args>)

ちゃんとソース読むまで何やってるか分からなかったんですけど、tutor.vimってファイル作ってからもう一回editで読み直してるんスね。で、そのときに保存するディレクトリを最初の方でガチャガチャやってるんですけど、なんかもうめんどくさくなってきたんで保存場所を$VIMFILESに固定しました。

で、はじめてのUSキーボードはどうなのかというと…

:押せないです。(半ギレ)

Vim を使ってみる。

$
0
0

Vimという、ちょと変わったエディタがあるそうなので
使ってみたいと思います。

Vimのインストール

公式サイトのDLページ
https://www.vim.org/download.php

Ubuntuの方は

sudo apt install vim

Vimの使い方

vi

もしくは

vim

で起動
ターミナルが開いたんだけど、、、

:q

で、終了

vimturtor

で丁寧に使い方を教えてくれます。

余談

ターミナルを半透明にすると、カッコイイですよ
Screenshot from 2018-05-27 19-27-56.png

追記

設定ができるみたいです。
https://qiita.com/okamos/items/d7fdbee03c4857b1ce20

普通に、atomでいいや

参考リンク

Vin公式の
https://www.vim.org/
Uubnutのターミナルを半透明にする方法
https://blogs.yahoo.co.jp/zakki_roku/64842066.html

初心者、私の.vimrc

$
0
0

自分の.vimrcを公開しながら、良い設定やプラグインなどを随時更新していきます。

:syntax on$
:set ruler$
:set autoindent$
:set list$
:set shiftwidth=4$
:set softtabstop=4$
:set hlsearch$
:set nowrap$
:set sidescroll=10$
$
"背景"$
syntax enable$
set background=dark$
let g:solarized_termcolors=256$
$
set nocompatible$
filetype plugin indent off$
$
if has('vim_starting')$
  set runtimepath+=~/.vim/bundle/neobundle.vim$
endif $
$
call neobundle#begin(expand('~/.vim/bundle'))$
NeoBundleFetch 'Shougo/neobundle.vim'$
$
$
NeoBundle 'Shougo/unite.vim'$
NeoBundle 'Shougo/neosnippet.vim'$
$

"Node.js関連の設定"$
NeoBundleLazy 'heavenshell/vim-jsdoc' , {'autoload': {'filetypes': ['javascript']}}$
NeoBundle 'pangloss/vim-javascript'$
NeoBundle 'Townk/vim-autoclose'$
NeoBundle 'moll/vim-node'$
$
NeoBundle 'scrooloose/syntastic'$
let g:syntastic_check_on_open=0 "ファイルを開いたときはチェックしない$
let g:syntastic_check_on_save=1 "保存時にはチェック$
let g:syntastic_check_on_wq = 0 " wqではチェックしない$
let g:syntastic_auto_loc_list=1 "エラーがあったら自動でロケーションリストを開く$
let g:syntastic_loc_list_height=6 "エラー表示ウィンドウの高さ$
set statusline+=%#warningmsg# "エラーメッセージの書式$
set statusline+=%{SyntasticStatuslineFlag()}$
set statusline+=%*$ 
let g:syntastic_javascript_checkers = ['eslint'] "ESLintを使う$
let g:syntastic_mode_map = {$
      \ 'mode': 'active',$
      \ 'active_filetypes': ['javascript'],$
      \ 'passive_filetypes': []$
      \ }$
$
NeoBundle 'thinca/vim-quickrun'$
" 水平に分割する$
let g:quickrun_config={'*': {'split': ''}}$
$
NeoBundle 'tomasr/molokai'$
$   
call neobundle#end()$
$   
filetype plugin indent on$

NeoVimのGUI実装. OniVimの紹介

$
0
0

NeoVimのGUI実装. OniVimの紹介

OniVim Screenshot

OniVimとは

Oni is a new kind of editor, focused on maximizing productivity - combining modal editing with features you expect in modern editors. Oni is built with neovim, and inspired by VSCode, Atom, LightTable, and Emacs
https://github.com/onivim/oni

OniVimはVSCodeやAtom等にインスパイアされた, NeoVimベースのクロスプラットフォームGUIエディタです.

内部的にはReact+Electronで作られていて, デフォルトでJSX記法のシンタックスハイライトに対応していたり, ブラウザを内包していたりして, 拡張性がかなり高くモダンなUI/UXのエディタになっています.

現時点(2018/06/06)では, v0.4でまだまだ開発中のため日本語入力などはまだ弱いですが(Let's PR), 設定無しでも快適に使えるVim系エディタとして最近利用し始めました.

特徴

Github, Documentよりいくつか紹介します.

エディタではありますがIDE的な機能を搭載していて, 特にJavascript, React.js等のエディタとしては必要な機能はほとんど揃っています.

また, Vimなのですべてキーボードのみで操作できるところも見どころの一つではないかと思います.


コード補完

Code Completion
サポートされた言語なら, クラスのメソッド等の補完機能があります.

Fuzzy Finder

Fuzzy Finder
macOSのSpotlightみたいな感じでファイルを開けます.

シンタックス/コンパイルエラー

Syntax / Compilation Errors
IDEですね. Language Server Protocolという技術を使っているようです.

クイックインフォ

Quick Info
メソッドや変数等の情報(引数, 返り値, 型情報など)をポップアップで表示してくれる機能です. 組み込み関数はもちろんのこと, 自作関数や変数の型や引数のデータ構造についても詳しく表示してくれます.

埋め込みブラウザ

Embedded Browser
垂直, 水平方向に分割してブラウザを開けます. 現バージョンでは, まだ安定はしてないですが, 今後期待できる機能です.

チュートリアルモード

Interactive Tutorial
Vimのお作法をインタラクティブに学べるモードがあります. ちょっとやってみましたが, ゲーム感覚でVimを学べるいい環境だと思います.


その他, 機能についてはGithub等で紹介されてます. 

まとめ

まだまだ開発進行中のOniVim.

日本語入力が弱かったり不安定な機能もありますが, インストールするだけで使えるVim系GUIエディタとしてはとても使いやすいと思います. Roadmapを見ると, バージョン管理システムとの連携やJS/Reactなどのライブプレビュー, またローカライゼーション等も含まれていて今後期待できるエディタだと思います.

みなさんもお好みのエディタに精通して質の高いプログラミングライフを送りましょう!


Vimで使える正規表現のリンク

centos7にvim8をインストール(Ansible)

$
0
0

いろいろ辛くてvim8を開発用のdockerに入れた

環境

$ cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

ansible

roles/vim/tasks/main.yml
-name:check vim.stat:path=/usr/local/bin/vimregister:vim_bin-block:-name:yum install.yum:name={{ item }} state=latestwith_items:-lua-devel-python-devel-ruby-devel-ncurses-devel-name:clone vim8.git:repo=git://github.com/vim/vim.gitdest=/tmp/vimversion=v8.1.0037-name:make vim8.shell:"{{item}}"args:chdir:/tmp/vim/srcwith_items:-./configure --with-features=huge --enable-multibyte --enable-luainterp=dynamic --enable-gpm --enable-cscope --enable-fontset --enable-fail-if-missing --prefix=/usr/local --enable-pythoninterp=dynamic --enable-rubyinterp=dynamic-make-make installbecome:yeswhen:not vim_bin.stat.exists

これで快適

High Sierra にて crontab の編集エディターを nano から vim に変更する方法について

$
0
0

概要

Ruby にてスクレイピングを定期的に実施したいと考えたため、cron をセットしようとしました。
crontab -e にて編集しようとすると、見慣れない nano エディタが起動して、非常にわかりずらい。
それで vim をエディターにしたいと思いました。

方法

下記の 2 つを設定することで実現できました。

How to specify nano or vim as editor for crontab file
https://www.garron.me/en/bits/specify-editor-crontab-file.html

How to save and exit crontab -e?
https://serverfault.com/questions/308085/how-to-save-and-exit-crontab-e

export VISUAL=vim;# nano でも良いexport EDITOR=vim;

補足

日本語サイトを少し見てみると、

export EDITOR=vim;

で ubuntu などで変更できます、という記事は出てきましたが、私の High Sierra では変更されませんでした。

そこで、上記の EDITOR の設定を削除して、

export VISUAL=vim;

とすると crontab -e 起動時のエディターは vim になりました。
しかしながら、編集を保存後に、crontab -l で内容を見ても変更が確認できませんでした。
よくはわからないですが、VISUAL 変更後には EDITOR の設定が明示的に必要になるように思われました。

そろそろvimrcを晒してみたい

$
0
0

時々やってる人を見てて、人に見せても恥ずかしくなくなってきたらやろうと思ってたんです。こまめにコメント入れてるので解説はいいかなー。

vimrc

vimrc
" ディレクトリ設定せんとなんか怖くない?if( has('win32')&& !has('nvim'))cd~/vimfiles
elseif has('nvim')cd~/AppData/Local/nvim
elseif has('unix')cd~/.vimendiflet $VIMFILES=getcwd()" 文字コード関係set encoding=utf-8set fileencoding=utf-8set fileencodings=ucs-bom,utf-8,cp932,iso-2022-jp,euc-jisx0213,euc-jp,guess
if has ('win32')set fileformat=dos
    set fileformats=dos,unix,mac
elseif has ('unix')set fileformat=unix
    set fileformats=unix,dos,mac
endif" 検索周りset ignorecase smartcase
set hlsearch

" diff関連if has ('win32')set diffexpr=MyDiff()endiffunction! MyDiff()letopt=""if&diffopt =~"icase"letopt=opt."-i "endifif&diffopt =~"iwhite"letopt=opt."-b "endifsilent execute '!diff.exe -a --binary '.opt.v:fname_in .' '.v:fname_new .'" > "'.v:fname_out
endfunctionset diffopt=filler,vertical" 編集関係set autoindent
set backspace=indent,eol,startset wildmenu
set clipboard+=unnamed

" 画面表示set tabstop=4set shiftwidth=4setnumberset ruler
set list
set listchars=tab:>-,trail:-set wrap
set laststatus=2set cmdheight=2set showcmd
set title
set cursorline
set splitbelow
set splitright
set noequalalways
set winwidth=1set winminwidth=1set winheight=1set winminheight=1set scrolloff=5" カラースキーム設定はvim-plugのあとに行きました。"lightline用だけどvimネイティブの機能なので…set statusline=2" guioption関係(多いのでまとめ)set guioptions-=T
set guioptions-=lset guioptions-=rset guioptions-=L
set guioptions-=R

set mouse=nr

" バックアップset backup
if has('win32')set backupdir=E:/document/backup
elseif has('unix')set backupdir=~/backup
endifset undodir=./autogen

" viminfoif( has('win32')&& !has('nvim'))set viminfo='100,<50,s10,h,rA:,rB:let&viminfofile = $VIMFILES.'/viminfo.win'elseif has('nvim')set viminfo='100,<50,s10,h,rA:,rB:./nviminfo.nvim
elseif has('unix')set viminfo='100,<50,s10,h,rA:,rB:n~/.vim/viminfo.bow
endif" 開いたファイルのディレクトリに自動で移動するset autochdir

" シェル設定if has('win32')setshell=powershell
    set shellcmdflag=-cset shellquote=\"
    set shellxquote=endif" 日本語の文章構造に対応するやつset matchpairs+=:,:,:,:,:,:" 三点リードおかしいやん…set ambiwidth=double

" 日本語入力の便宜 (thanks, kaoriya.)if has('multi_byte_ime')|| has('xim')" IME ON時のカーソルの色を設定(設定例:紫)" highlight CursorIM guibg=Purple guifg=NONE" 挿入モード・検索モードでのデフォルトのIME状態設定set iminsert=0 imsearch=0if has('xim')&& has('GUI_GTK')" XIMの入力開始キーを設定:" 下記の s-space はShift+Spaceの意味でkinput2+canna用設定set imactivatekey=s-space
    endif" 挿入モードでのIME状態を記憶させない場合、次行のコメントを解除
    inoremap <silent><ESC><ESC>:set iminsert=0<CR>endif" 脱初心者を目指すVimmerに|ススメしたいVimプラグインや.vimrcの設定" https://qiita.com/jnchito/items/5141b3b01bced9f7f48fr最後のカーソル位置を復元するif has("autocmd")
    autocmd BufReadPost *
    \if line("'\"")>0&& line ("'\"")<= line("$")|    \    exe "normal! g'\""|    \endifendif" netrw.vim用letg:netrw_liststyle=1letg:netrw_mousemaps=0"他のファイル読まないように…if!exists('s:isReload')" vim-pluglet $MYPLUG=$VIMFILES.'/vim-plug/vim-plug.conf.vim'
    source $MYPLUG

    " 自作コマンド/リマップ群のローダー
    source remap.vim
    runtime! command.d/*.vimendiflets:isReload=1

gvimrc

gvimrc
" 変数定義lets:winfont='Ricty_Diminished_for_Powerline:h12'lets:unixfont='a14,r14,k14'lets:winprintfont=s:winfontlets:unixprintfont=s:unixfont" フォントif has('win32')let&guifont =s:winfontset linespace=1elseif has('xfontset')let&guifontset =s:unixfontendif" 印刷関係if has('printer')if has('win32')let&printfont =s:winprintfontendifendif" Hack #120: gVim でウィンドウの位置とサイズを記憶する" http://vim-jp.org/vim-users-jp/2010/01/28/Hack-120.htmlletg:save_window_file= expand($VIMFILES.'/.vimwinpos')
augroup SaveWindow
    autocmd!
    autocmd VimLeavePre * calls:save_window()function!s:save_window()letoptions=[            \'set columns='.&columns,            \'set lines='.&lines,            \'winpos '. getwinposx().' '. getwinposy(),            \]call writefile(options,g:save_window_file)endfunction
augroup END

if filereadable(g:save_window_file)
    execute 'source'g:save_window_fileendif

remap.vim

remap.vim
" 甘えるな、hjklを使え
noremap <Left><Nop>
noremap <Down><Nop>
noremap <Up><Nop>
noremap <Right><Nop>

inoremap <Left><Nop>
inoremap <Down><Nop>
inoremap <Up><Nop>
inoremap <Right><Nop>

nnoremap <Down>:<Down>
nnoremap <Up>:<Up>
nnoremap <S-Down> /<Down>
nnoremap <S-Up> /<Up>" 赤鼻がうっさい
map <MiddleMouse><Nop>
imap <MiddleMouse><Nop>
cmap <MiddleMouse><Nop>" 試しにリーダーキーを変えてみるlet mapleader ="\<Space>"" 検索を必ずVeryMagicに
nnoremap / /\v" ハイライトうざったいんじゃ!
noremap <Esc><Esc>:noh<CR>" ggVGがめんどい
nnoremap g<C-a> ggVG

" 個人的にこれが一番直交感ある
vnoremap v<Esc>V

" インサートモード中の^Hに対応して^Lで<Del>させる様に
inoremap <C-l><Del>" 短縮入力用"どっちにしても遠すぎるわ
inoremap <C-]><C-]> \|" Markdownの作表
inoremap <C-]>ll:--\|
inoremap <C-]>cc:-:\|
inoremap <C-]>rr --:\|" htmlのエスケープ
inoremap <C-]><Space>&nbsp;
inoremap <C-]>& &amp;
inoremap <C-]><&lt;
inoremap <C-]>,&lt;
inoremap <C-]>>&gt;
inoremap <C-]>.&gt;
inoremap <C-]>" &quot;

" <Leader>関係" 普通のキーマップはあまり汚さないように" 句読点を強引に挿入
nnoremap <Leader>,i,<Esc>
nnoremap <Leader>.i.<Esc>
nnoremap <Leader>? i?<Esc>
nnoremap <Leader>!i!<Esc>
nnoremap <Leader>/ i/<Esc>
nnoremap <Leader>\ i\<Esc>
nnoremap <Leader>:i:<Esc>
nnoremap <Leader><Space>i<Esc>
nnoremap <Leader><S-Space>i<Esc>" IMEのモードを指定して挿入モードに入れないだろうか?
nnoremap <Leader>ii^^
nnoremap <Leader>aa^^
nnoremap <Leader>I I^^
nnoremap <Leader>A A^^
nnoremap <Leader>oo^^
nnoremap <Leader>O O^^
" indent guidesとバッティングしたので
nmap <silent><Leader><C-i><Plug>IndentGuidesToggle

nnoremap <Leader>h ^
nnoremap <Leader>l $

" Leaderメニュー
noremap <Leader>ff :Ex 
noremap <Leader>mm :Pipe marks<CR>
noremap <Leader>cc:Pipe changes<CR>
noremap <Leader>jj :Pipe jumps<CR>" 以下2つは recents.vim 参照
noremap <Leader>rr :Pipe! RRoldfiles \v
noremap <Leader>bb :Pipe BBls \v" 設定ファイル読み込み用" キーマップの為に一部ファイルのパスを環境変数にlet $MYCOMMAND = $VIMFILES.'/command.d'let $MYREMAP = $VIMFILES.'/remap.vim'

noremap <Leader>vv :e $MYVIMRC<CR>
noremap <Leader>vg :e $MYGVIMRC<CR>
noremap <Leader>vc :e $MYCOMMAND<CR>
noremap <Leader>vc<CR>:e $MYCOMMAND<CR>
noremap <Leader>vr :e $MYREMAP<CR>
noremap <Leader>vp :e $MYPLUG<CR>
noremap <Leader>vv!:e! $MYVIMRC<CR>
noremap <Leader>vg!:e! $MYGVIMRC<CR>
noremap <Leader>vc!:e! $MYCOMMAND<CR>
noremap <Leader>vr!:e! $MYREMAP<CR>
noremap <Leader>vp!:e! $MYPLUG<CR>" バッファ増えすぎ問題
nnoremap <Leader>bd:%bdelete
nnoremap <Leader>bw:%bwipeout" source読み込み用
noremap <Leader>ss :source<Space>%<CR>" vim-plug用
noremap <leader>pp:PlugInstall<CR>" MarkDown Preview
noremap <Leader>md :!start"vivaldi.exe""%"<CR>" Width=80想定のドキュメントのウィンドウサイズを読みやすく
noremap <Leader>ww :vertres80<CR>" qiitactl用
noremap <Leader>qq :QiitaFiles<CR>" collar.vim
nnoremap <silent><Leader><CR>:DeStain<CR>

vim-plug.conf.vim

vim-plug.conf.vim
cd $VIMFILES

let $VIMPLUGGED=$VIMFILES.'/vim-plug'call plug#begin($VIMPLUGGED)
    Plug 'itchyny/lightline.vim'
    Plug 'simeji/winresizer'
    Plug 'xolox/vim-misc'| Plug 'xolox/vim-session'"   Plug 'vim-scripts/netrw.vim'
    Plug 'yuratomo/w3m.vim'"   Plug 'vim-scripts/ViewOutput'
    Plug 'vim-jp/autofmt'
    Plug 'vim-jp/vimdoc-ja'
    Plug 'deton/jasegment.vim'
    Plug 'deton/jasentence.vim'
    Plug 'nathanaelkane/vim-indent-guides'
    Plug 'tpope/vim-surround'
    Plug 'flazz/vim-colorschemes'"   Plug 'thinca/vim-splash'"   Plug 'thinca/vim-quickrun'call plug#end()" vim-plugロード後の各プラグインの設定" 多くなりそうならconf.vimへ" runtimeロードは出来なかったので要source記述" lightline.vim
source $VIMPLUGGED/lightline.conf.vim" vim-sessionif has ('win32')letg:session_directory= $VIMFILES.'/sessions/win'elseif has ('unix')letg:session_directory= $VIMFILES.'/sessions/bow'endififv:servername=~'VIM$'letg:session_autosave='yes'letg:session_autoload='yes'letg:session_autosave_periodic=0elseletg:session_autosave='no'letg:session_autoload='no'letg:session_autosave_periodic=0endif" newrw.vim"let g:netrw_sort_sequence='[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$'"let g:netrw_sort_sequence='[\/]$'"let g:netrw_sort_options='n'" w3c-vimif has('win32')letg:w3m#command ='w3m.exe'endifletg:w3m#search_engine ='http://www.google.co.jp/search?ie='.&encoding .'&q=%s'
cnoremap wwwm W3m

" vim-indent-guidesletg:indent_guides_enable_on_vim_startup=0letg:indent_guides_default_mapping=0" vim-surround" 上から順番に、l, L, 9, 0, ,(comma), .(period), *, &, qletg:surround_108="「\r」"letg:surround_76="『\r』"letg:surround_57="( \r )"letg:surround_48="(\r)"letg:surround_44="< \r >"letg:surround_46="<\r>"letg:surround_42="**\r**"letg:surround_38="&lt;\r&gt;"letg:surround_113="&quot;\r&quot;"" vim-colorschemescolorscheme janah

vital.vimのData.Listにラムダ式が渡せるようになりました!

$
0
0

まとめ

 このPRにより、
Vim scriptの準標準ライブラリであるvital.vimのData.Listモジュールで、
Funcref(ラムダ式や関数参照)が使用可能になりました!
:tada::tada::tada:

Vim scriptでFunctional Programmingを楽しもう! :dog2:

lets:L= vital#vital#new().import('Data.List')let xs = range(0,50)let xs =s:L.map(xs,{x->    \(x % 5==0)&& (x % 3==0) ? 'FizzBuzz'    \:(x % 5==0) ? 'Fizz'    \:(x % 3==0) ? 'Buzz'    \: string(x)\})function!s:p(x) abort
    returna:x==# 'Fizz'endfunctionlet xs =s:L.filter(xs,function('s:p'))
echo s:L.all(function('s:p'), xs)" 1

背景

 Vim8.0でラムダ式がサポートされましたので、
Data.ListがFuncrefに対応する必要がありました。

このPR以前では下記のような、
式を表す文字列を渡すことしかできませんでした。
これはVim scriptの伝統的な方法です。

lets:L= vital#vital#new().import('Data.List')
echo s:L.map(range(0,9),'v:val + 1')" [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

今回の追加で

 下記のように、
Funcref(ラムダ式、関数参照)を使用することができるようになりました!

lets:L= vital#vital#new().import('Data.List')function!s:succ(x) abort
    returna:x+1endfunction" ラムダ式let Succ ={x->x+1}" 関数参照let Succ_ =function('s:succ')let xs = range(0,9)
echo s:L.map(xs, Succ)==s:L.map(xs, Succ_)" 1

Vim scriptの古き伝統ともおさらば :confetti_ball:

おまけ

Data.List.Closure

 vital.vimには、
Vim8.0より前のVimでも関数の部分適用を行うためのData.Closureモジュールが存在します。

今回のPRでは、
Data.ClosureのオブジェクトでData.Listの各関数を使用するためのData.List.Closureモジュールも追加されました。

lets:V= vital#vital#new()lets:C=s:V.import('Data.Closure')lets:CL=s:V.import('Data.List.Closure')function!s:plus(x,y) abort
    returna:x+a:yendfunctionlet plus =s:C.from_funcref(function('s:plus'),[10])let xs = range(0,9)
echo s:CL.map(xs, plus)" [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

 Data.List.Closureはパフォーマンスに難があるため、
Data.List内の直接対応は見送られました。

ですので基本的には、
Vim8.0で追加されたclosure付き関数(ラムダ式)
またはfunction関数による部分適用
との組み合わせでData.Listを使用した方がよいでしょう。

以上

 Vim scriptでFunctional Programmingを楽しもう!
Data.OptionalとData.Eitherもあるよ!

@ Milly

 実は本PRは途中で「Vim 7.4のみでVim scriptのパースエラーが起きる」という問題に出くわしていて、
遥かなるだるみによって放置してしまっていました。

そこでその対応をしてくださったのがMillyさんでした。
ありがとうございました!

便利なページ

オレオレVIM設定

$
0
0

Plugin managerインストール

 curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

.vimrc設定

set number
set tabstop=4
set autoindent
set t_Co=256

call plug#begin('~/.vim/plugged')

" Make sure you use single quotes

" NerdTree
Plug 'scrooloose/nerdtree', { 'on':  ['NERDTreeToggle'] }

" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
Plug 'junegunn/vim-easy-align'

" vim hybrid
Plug 'w0ng/vim-hybrid'
set background=dark
colorscheme hybrid

" neocomplete
Plug 'https://github.com/Shougo/neocomplete.vim'

" neomru
Plug 'https://github.com/Shougo/neomru.vim'

" unite
Plug 'https://github.com/Shougo/unite.vim'

" Any valid git URL is allowed
Plug 'https://github.com/junegunn/vim-github-dashboard.git'

" Multiple Plug commands can be written in a single line using | separators
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
"Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

" Plugin outside ~/.vim/plugged with post-update hook
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }

" Unmanaged plugin (manually installed and updated)
Plug '~/my-prototype-plugin'

" Initialize plugin system
call plug#end()

" Setting for color theme
hi LineNr ctermbg=0 ctermfg=0
hi CursorLineNr ctermbg=2 ctermfg=0
set cursorline
hi clear CursorLine

" Setting for NerdTree
map  :NERDTreeToggle

" Setting for neocomplete
highlight Pmenu ctermbg=4
highlight PmenuSel ctermbg=1
highlight PMenuSbar ctermbg=4

" 補完ウィンドウの設定
set completeopt=menuone

" 補完ウィンドウの設定
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_enable_auto_select = 1

" ポップアップメニューで表示される候補の数
let g:neocomplcache_max_list = 20

" シンタックスをキャッシュするときの最小文字長
let g:neocomplcache_min_syntax_length = 3

" 補完の設定
autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete
if !exists('g:neocomplete#force_omni_input_patterns')
  let g:neocomplete#force_omni_input_patterns = {}
endif
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*'

" Settings for unite
" unite.vimの設定
noremap  :Unite -buffer-name=file file " ファイル一覧
noremap  :Unite file_mru " 最近使ったファイル一覧

au FileType unite nnoremap     unite#do_action('split') " ウィンドウを分割して開く
au FileType unite inoremap     unite#do_action('split')

" ESCキーを2回押すと終了する
au FileType unite nnoremap    q
au FileType unite inoremap    q

プラグインインストール

vim
:PlugInstall

ショートカット

  • NerdTree切り替え:Ctrl-N
  • Uniteファイル履歴参照:Ctrl-U+Ctrl-R
  • Uniteファイル一覧:Ctrl-U+Ctrl-F
  • カーソル選択時ハイライト:hi CursorLineNr ctermbg=2 ctermfg=0
  • Neocomplete保管:tabキー

参考リンク

https://qiita.com/mochizukikotaro/items/def041700846adb903fe
http://kengotakimoto.com/post-2351/
https://qiita.com/ykyk1218/items/ab1c89c4eb6a2f90333a#%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%81%AE%E9%80%9F%E5%BA%A6%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B

NeovimでC++の環境を整えてみた

$
0
0

はじめに

研究室に配属されて、とうとう逃げ続けてきたC++を書くことになったので勉強がてら環境設定をしていました。
その環境設定の備忘録として記事を書きます。

環境

  • OS: MacOS High Sierra
  • neovim: v0.2.2

Pluginはdeinを使用しています。

インストールするもの

上の2つは補完用
一番下のものはlinterみたいなものです。多分。
僕はセーブ時に自動で修正するようにしています。

インストール

dein_lazy.toml
[[plugins]]repo="Shougo/deoplete.nvim"on_i=1on_event="InsertCharPre"hook_source="""
  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
  set completeopt-=preview
  "autocmdInsertLeave,CompleteDone*ifpumvisible()==0|pclose|endif"""[[plugins]]repo="zchee/deoplete-clang"on_ft="cpp"depends="deoplete.nvim"hook_add="""
let g:deoplete#sources#clang#libclang_path='/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libclang.dylib'
let g:deoplete#sources#clang#clang_header='/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang'
"""[[plugins]]repo="rhysd/vim-clang-format"on_ft="cpp"hook_add="""
function! CPPCodeCleanup()
  let l:lines='all'
  let g:clang_format_fallback_style = 'Google'
  :pyf /usr/local/share/clang/clang-format.py
endfunction
command! CPPCodeCleanup call CPPCodeCleanup()
autocmd BufWrite *.{cpp} :CPPCodeCleanup
"""

Shougo/deoplete.nvim

Shougo/deoplete.nvimは言わずとしれた補完用のプラグインですね。
これはneovim使ってる人だったらだいたい知ってるんじゃないかなと思います。

コメントアウトしているautocmd InsertLeave,CompleteDone * if pumvisible() == 0 | pclose | endifdeoplete-clangの使用時にneovimの上にプレビューウィンドウが出てくるんですが、それを補完終了時に閉じてくれるというものです。
僕はそもそも、プレビューウィンドウいらないなと思って、最初から出ないようにしています。(set completeopt-=preview)
特に気にならないと言う人は無くてもいいと思います。

zchee/deoplete-clang

これはdeoplete.nvimのC, C++用の拡張みたいなものです。
使用するにはClang等のパスを通す必要があります。

パスについては、僕はXCodeのものを使用しました。
適宜パスは変えてもらえるといいかもです。

rhysd/vim-clang-format

僕は保存時にC++のフォーマットを整理するようにしています。
調べてみたら、コード規約は色々あるみたい。
僕は特にこだわりが無いのでGoogleを使っています。

最後に

他に調べてみたら、thinca/vim-quickrunを使って自動コンパイルとかも良さげだった。
これはまた必要になったら追加してみようかな。

一応これがスクショです。
deopleteで[clang]が出てきていたら、deoplete-clangの導入は成功していると思います。

スクリーンショット 2018-04-23 8.31.08.png


macのvimでクリップボードにコピーを使いたい!!

$
0
0

なんと、mac標準のvimではクリップボードにコピーができないらしい!!!

まあ一応確認しておきましょう。

vim --version | grep clipboard

と打ってみてください。

このように、「-clipboard」と書かれていればアウトです。vimでクリップボードは使えません!!

スクリーンショット 2018-06-12 9.00.31.png

解決方法はHomebrewでvimをインストールしてくることです。

Homebrewでvimをインストール

まずは最新にアップデート

brew update

そして、インストール

brew install vim 

クリップボードを使えるか確認してみる

/usr/local/Cellar/vim/8.1.0001/bin/vimの8.1.0001の部分は人によって違うので、正しいバージョンに書き直してください。

/usr/local/Cellar/vim/8.1.0001/bin/vim --version | grep clipboard

出力結果で、「+clipborad」となっていればOK!!!!!

スクリーンショット 2018-06-12 9.07.00.png

前のvimを無効にして、新しいvimを使えるようにする

前のvimの名前を変更すれば使えなくなるようになります。

sudo mv /usr/bin/vim /usr/bin/old_vim 

新しいvimを使えるようにする

sudo ln /usr/local/Cellar/vim/8.1.0001/bin/vim /usr/bin

vimの設定で、クリップボードを使えるようにする

~./.vimrcに以下のコードを付け足す

まずは、.vimrcがあるかどうかを確認しましょう。
(前のバージョンのvimをよく使っていた方は普通に.vimrcに付け足してもらえればオッケーです。)

ls ~/.vimrc

これで、.vimrcと出てくれば、そこに以下のコードを貼り付けてください。

set clipboard+=unnamed

.vimrcが出てこなければ、作ります

touch ~/.vimrc

そして、.vimrcにさっきのコードを貼り付けてください。

vimでクリップボードにコピーを使ってみる。

vimのいろんな使い方も同時に紹介しているので、コピーのやり方だけ知りたい方はその部分だけご覧ください。

vim初心者はコマンドを真似してください。vimコマンドやその他のコマンドがわかるようになると思います!
(コマンド練習用に新しいファイルを作りますが、そのファイルを消すコマンドも併せて使用しているので、無駄なファイルが残ることはありません。安心してください。)

新しいファイルを作る

touch clipboard.php

そのファイルをvimで扱う

vim clipboard.php

「vim !$」でも可(次で使います)

インサートモードにする

  • 「i」を押してください。インサートモードになります。
    インサートモードにすると、文字を挿入することができるようになります。

  • 以下の文章を打ってください。

<?php echo "clipboardにコピーをする"; ?> 
  • Escキーを押してください。(インサートモード解除)

  • 「:wq」と打ってください(上書き保存)

文字が入力されたか確認します。

以下のコードを打ってください。

cat !$

!$は一つ前の、コマンドじゃないところが同じの時に使います。

さっき、vim clipboard.phpと打ったので、cat !$と打つと、cat clipboard.phpという意味になります。

<?php echo "clipboardにコピーをする"; ?>と出てきたら成功です!

もう一度vimを使用して、クリップボードにコピーをしよう

  • 以下のコマンドを実施してください。 先ほど説明したように、!$は一つ前の、コマンドじゃないところが同じの時に使います。 vim clipboard.phpという意味になります。
vim !$
  • 一番最初にカーソルを合わせて、「v」を押してください。(ビジュアルモードにします)

  • 矢印キーで最後まで洗濯してください(コピーしたい範囲を選択)

  • 「y」を押す(コピーします。vimではコピーのことを「ヤンク」というらしい。だから「y」なのか)

  • Escキーを押します(ビジュアルモード解除)

  • 「:q」を押す(vimを終了します。)

  • お使いのテキストエディタを開けて、貼り付けしてみてください!できていれば成功です

ファイルを削除する

もう使わないので、このファイルを削除しちゃいましょう。
ファイルの削除はrmコマンドです。「remove」からきたのかな?

rm!$

ファイルが削除できているか確認してみましょう

ls!$

clipboard.php: No such file or directoryと出ればオッケーです!

手順通りにやったら、ターミナルはこんな感じになっているはず

スクリーンショット 2018-06-12 9.22.27.png

おしまいです!

【備忘録】Vimの基本的な使い方その1

$
0
0

Vimのモード

■ Normalモード(ノーマルモード) Vim固有の操作を実行するモード。カーソル移動などの基本操作が行える。

■Insertモード(挿入モード) 普通のエディタのように、テキスト入力が行える。

■ Commandモード(コマンドモード) :(コロン)から始まるコマンドを実行するモード。保存、終了、置換などのコマンドを実行できる。

■ Visualモード(ビジュアルモード)「選択モード」。選択範囲に対して操作を行うコマンドを実行できる。選択範囲のコピーなど。

起動と終了

ターミナルで以下のコマンドを実行すると起動する。

$ vim

ファイルを指定して起動

$ vim hoge.txt

Vim 起動後にファイルを開く

# カレントディレクトリのファイルを開く
:e hoge.txt

# ファイルパスを指定して開く
:e ../huga.txt

終了するには「:」を入力してコマンドモードに切り替えてから「q」を入力してEnterキーを押下する。

コマンド入力をキャンセルして終了したい場合は、ESCキーを押下したあとに「:q」を入力してEnterキーを押下する。

入力

Vimの起動直後はノーマルモードから始まる。
テキスト入力を行うためにはインサートモードに遷移する必要がある。
インサートモードへの遷移の方法は「i」または「a」、「o」で行える。

i、a、oはそれぞれ以下の通り違いがある。

iカーソルの位置から入力を開始する。
aカーソルの右隣から入力を開始する。
oカーソル行の下に新しい行を挿入して入力を開始する。

保存

入力した値の保存はコマンドモードで行う。
入力モードからESCキーを押下してコマンドモードに遷移してから、
「:w」を入力してEnterキーを押下すると保存が完了する。

ファイルの新規作成

enewコマンドにより新しいバッファが作成される。

:enew

新しいバッファはwコマンドで名前をつけて保存できる。

:w fuga.txt

操作の巻き戻し

ノーマルモード時に「u」を押すことで操作を元に戻すことができる。また、CTR キーと「r」を押下することで元に戻した直前の操作をやり直すことができる。

VimでInsertモードからNormalモードに切り替える時に自動で英数入力に切り替える (for Mac High Sierra)

$
0
0

VimのNormalモードで日本語入力が鬱陶しい

latexの文章を自分のテキストエディタで書いている時,日本語入力のままNormalモードでコマンドを打ってしまい,Vim操作にならず手間がかかることが多々あったので,InsertからNormalに切り替えるときに自動で英数入力に切り替える方法を調べた.

KarabinerではSierra, High Sierraでの方法がわからない

キーバインドを自由に設定できるKarabinerでは,Sierra,High Sierraにおいて複数キーを複数キーにリマップすることができないらしい.自分でもやってみたがうまくいかなかった.

Hammerspoonを利用するとできた

Hammerspoonは,macOSに関する様々な処理を自動化するツール.

https://blog.freedom-man.com/macos-sierra-keyremap/
このサイトを参考に,設定してみる.
Hammerspoonをインストールし,起動 -> Enable Accessibilityをクリック -> セキュリティとプライバシーのプライバシーでHammerspoonにチェック
このあと,configをいじる.
File -> Open configで,init.luaファイルを編集.

init.lua
localfunctionkeyCode(key,modifiers)modifiers=modifiersor{}returnfunction()hs.eventtap.event.newKeyEvent(modifiers,string.lower(key),true):post()hs.timer.usleep(1000)hs.eventtap.event.newKeyEvent(modifiers,string.lower(key),false):post()endendlocalfunctionkeyCodeSet(keys)returnfunction()fori,keyEventinipairs(keys)dokeyEvent()endendendlocalfunctionremapKey(modifiers,key,keyCode)hs.hotkey.bind(modifiers,key,keyCode,nil,keyCode)endremapKey({'ctrl'},']',keyCodeSet({keyCode('escape'),keyCode(';',{'ctrl','shift'})}))hs.hotkey.bind({"cmd","alt","ctrl"},"R",function()hs.reload()end)hs.alert.show("Config loaded")

コードの説明は下の参考にしたサイトでみていただければと思う.
このようにファイルを設定した後,File -> Reload configで,configをリロードする.
これでInsertからNormalにスムーズに切り替えができるようになった.
ちなみに,カタカナ入力をオンにしている場合はうまくいかない場合があるので,
システム環境設定 -> キーボード -> 入力ソース -> 日本語
から,カタカナ,半角カタカナのチェックを外しておくとうまく行くと思う.

めっちゃ参考にしたサイト:
https://blog.freedom-man.com/macos-sierra-keyremap/

vimtex on macOS でハマったときのメモ

$
0
0

目標

vimで編集しながら、バックグラウンドで自動的にコンパイルをしてくれる環境を構築すること。

環境

  • macOS High Sierra 10.13.5
  • vim 8.1.50
  • vimtex: 2018/06/13 の最新版
  • latex: TeX Live 2018

ハマったポイント

  • ~/.latexmkrcが反映されない
  • vim のクリップボード使えない

解決策

  • main.texの1行目に %! TEX program = uplatexを記入
  • vim と neovim をうまく使い分ける

インストールから解決まで

1. Homebrew の vim を --with-client-serverオプション付きでインストールし直す

バックグラウンドでコンパイルをさせるためには vimclientserverが有効になっている必要がある(vimtex の wiki参照)。
デフォルトで Homebrew からインストールした場合は無効になっているはずなので、 vim を再インストールする。

# インストール
brew uninstall vim
brew install vim --with-client-server# 確認
vim --version | grep clientserver
# +clientserver      +job               +perl              +vertsplit

+clientserverがあればOK。

2. .latexmkrcを作成

こちらの記事をもとに .latexmkrcを作成する。
PDF viewer は Skim というアプリケーションを使用している。

~/.latexmkrc
#!/usr/bin/env perl$latex='uplatex -halt-on-error -file-line-error -synctex=1';$bibtex='upbibtex';$biber='biber -u -U --output_safechars';$dvipdf='dvipdfmx %O -o %D %S';$max_repeat=5;$pdf_mode=3;$pdf_previewer='open -ga /Applications/Skim.app';$pvc_view_file_via_temporary=0;

3. .vimrcを編集

私は普段 vim のパッケージ(プラグイン)をdein.vimというプラグインマネージャーを利用して管理しているので、 dein.vimが vimtex を読み込むように設定。

~/.vimrc
call dein#add('lervgg/vimtex')

ただこれだとデフォルトの設定のままでしか使えないので、最低限の設定を個別に行う。
設定方法も上と同じ記事を参考にする。

~/.vimrc
" call dein#add('lervgg/vimtex') の下に書くletg:vimtex_compiler_latexmk={  \'background':1,  \'build_dir':'',  \'continuous':1,  \'options':[],}letg:vimtex_view_general_viewer=  \'/Applications/Skim.app/Contents/SharedSupport/displayline'letg:vimtex_view_general_options='-r @line @pdf @tex'

設定の詳しい説明は vimtex のリポジトリのドキュメントを参照することを薦める(バージョンによって挙動が少し変わったりするので)。

4. 試してみる

実際にバックグラウンドでコンパイルができるか試してみる。
Wikiにあるように vim の起動時に --servername <NAME><NAME>は好きな名前)のオプションを付けなければならないので注意。

cd /tmp
vim --servername HOGE main.tex
/tmp/main.tex
\documentclass[uplatex]{ujarticle}\begin{document}
Hello World!
\end{document}

vim でこのファイル( main.tex)を開いている状態かつノーマルモードで \llとキーボードで打つとバックグラウンドコンパイルが開始する。
そしてコンパイルが成功する はずである。
ちなみに :nmapで vimtex のコマンドが確認できる。

5. ハマったポイント: ~/.latexmkrcは反映されない

さて、バックグラウンドコンパイルをすると何故か

 1 main.tex|| This file needs format `pLaTeX2e'
 2 main.tex|| Emergency stop.
 3 main.tex|| ==> Fatal error occurred, no output PDF file produced!

というエラーを出してコンパイルが失敗してしまう。
ノーマルモードで \loを打って出力を確認すると、、、

Latexmk: applying rule 'pdflatex'...
This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018) (preloaded format=pdflatex)

なぜか uplatexではなく pdflatexが実行されている。

一旦 vim で開いていたファイルを閉じて、コマンドライン上から latexmkを実行してみる

# /tmp 以下
latexmk main.tex
# ...# main.dvi -> main.pdf# [1]# 8515 bytes written# Latexmk: All targets (main.dvi main.pdf) are up-to-date

ちゃんと成功している。
なので原因は vim 内から latexmkを呼ぶときに正しく呼べていないことが分かる。

で、マニュアルを読んだ結果 main.texファイルの1行目に次のディレクティブを追加してやれば良いことがわかった。

%! TEX program = uplatex

したがって /tmp/main.texは次のように変更される

/tmp/main.tex
%! TEX program = uplatex\documentclass[uplatex]{ujarticle}\begin{document}
Hello World!
\end{document}

そして先程と同じように \llを打ってみる。
そして vimtex: Compilation completedが出力され、無事成功!

6. ハマったポイント: vim のクリップボード使えない

成功してから、普段のように vim を使っていたら前までできていた vim のコピペができないことが判明。
で、どうやら vimtex を設定したとき以降に発生したっぽいので、ググった結果のある GitHubある issue を発見。
要約すると、

  • +clipboardが有効になったいるのにコピペができない
  • 原因は +clipboard+xterm_clipboardが同時に有効になっていること
  • なので +xterm_clipboardを無効にすれば良い

実際に自分の環境で確認してみると

vim --version | grep xterm_clipboard
# -ebcdic            -mouseshape        +statusline        +xterm_clipboard

じゃ、なにがこれを有効にさせたかというと brew install vim --with-client-serverなわけである(確認済)。
そうなると clientserverを有効かつ xterm_clipboardを無効にしたいわけであるが、Homebrew ではそのようなオプションを設定できない。つまりソースコードからビルドするしかなくなるわけである。

実際に macOS で vim をソースコードからビルドしたが、どうも上の二つの条件をクリアするためのビルドのオプションが見つからなかった。

そして考えた結果、次のようにすることで(ひとまず)解決した。

  1. neovim をインストール
  2. neovim をコピペができる基本のエディターに設定
  3. vim はコピペができない状態のまま latex 専用エディターに設定

「原因療法」ではなく「対症療法」のような解決策なのが個人的にちょっと悔しいが、まあそのようなこともあると受け入れるしかなさそう。
ちょうど neovim への興味もあったのでこれを機に試してみたかったというのも大きいかもしれない。

まとめ

  • uplatexplatexを使って vimtex + latexmk でコンパイルしたい場合は main.texの1行目に %! TEX program = ...を記入する必要がある
  • brew install vim --with-client-serverで vim をインストールした場合クリップボードが無効になるので、うまく対処する必要がある(自分は vim と neovim を共存させることにした)

vimで日付を挿入する

$
0
0

vim(neovim)で日付を挿入する。

私が試したのは、
neovimですが、
vimでもどうようの動作が可能(なはず)

:r!date +\%Y/\%m/\%d
Viewing all 5719 articles
Browse latest View live


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