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

vim-multiple-cursors で Vim 上で複数行同時編集する

$
0
0

はじめに

Vim には矩形選択して編集することができますが、複数行を同時に編集することができないかやり方を探していました。

その中で見つけた、vim-multiple-cursorsというプラグインが便利そうだったので紹介します。

vim-multiple-cursors とは

vim-multiple-cursorsとは、Vim 上で Sublime Text でのような複数行同時編集ができるようになるプラグインです。

以下、vim-multiple-cursors の READMEからイメージ画像を引用します。矩形選択した後、それぞれの行でキー入力が反映されていることがわかると思います。

インストール

インストールはお好みのプラグインマネージャーを使って行います。以下は dein.vim での例です。

.vimrc
call dein#add('terryma/vim-multiple-cursors')

使い方

vim-multiple-cursors の READMEにはたくさんの使い方が載っていますが、取り急ぎ Visual モードでの使い方のみ記載します。

Visual モードで編集したい対象の範囲を選択した後、<C-n>と入力すると、vim-multiple-cursors の複数行入力モードが有効になります。

その後、iaで Insert モードに入り、キー入力すると、複数行入力モードで選択されているカーソルの部分に文字が入力されていきます。

おわりに

簡単な紹介になりましたが、こちらのプラグインによってテキスト編集の幅が広がる気がしました。これから使い込んでいこうと思います。


atcoderのテストケースを通すvim pluginを作った

$
0
0

qiita初投稿のため、いたらないところもたくさんあると思いますがご指摘いただけると助かります。

はじめに

こんにちは、飛べない豚です。
題名の通りatcoderのテストケースをチェックするvimpluginを作りました。
https://github.com/cannot-fly-pig/vim-atcoder
screenshot0.jpg
screenshot1.jpg
↑こんな感じ

使い方

:Atcoder コンテスト名 コンテスト番号 task(aとかbとか)

(例

:Atcoder ABC 131 c

と入力してエンターすると今開いているコードを実行してACかWAかを判定してくれます。
詳しくはREADME.mdを読んでください。

仕組み

  1. curlを使ってatcoderのコンテストのページを取得
  2. 正規表現を使ってパース、入力と出力を取得
  3. 2で取得した入力を使って実行、正解かどうかを判定
  4. データの整形、出力

と、まぁやってることは単純ですね

改善点

  • 今の所c++しか実行できないので対応言語を増やす
  • 企業コンへの対応
  • 非同期処理化

最後に

いかがだったでしょうか。
vimでatcoderをしている皆さん、そしてvimpluginを作ってみようと思っている皆さんの助けになれば幸いです。
ありがとうございました。

ソースコードを綺麗にPDF化する

$
0
0

動機

ソースコードをシンタックスハイライト付きでPDF化/印刷したいことはありませんか?個人的な需要として、コードレビューの際に手書きでメモを取りつつ読みたいというのがあります(iPadとApple Pencilがあると捗ります)。

使うもの

  • Vim
  • ps2pdf

やること

vim input.sh −c 'set popt=number:y | ha > tmp.ps | q'# input.shを適当に置き換える
ps2pdf tmp.ps out.pdf

結果のサンプル

image.png

参考 (他手法)

enscriptを使うのに比べて、言語指定をしなくて済むことと、Linux標準のツールだけでできることがメリットでしょうか。

[Vim] カーソル上の単語でvimgrep

$
0
0

皆さんvimgrep使ってますか?便利ですよねvimgrep。ただ、「*」みたいな単語検索が無くて不便だったので作りました。

概要

~/.vimrc
nnoremap " *:vimgrep/<C-r>// **/*.{cpp,cu,h,hpp}

これで「"」を押せば一発でvimgrepが走ります。以下詳細。

やりたいこと

たとえば、関数の引数を変えたので関数を呼んでいるところをすべて修正したいという状況が考えられます(void foo(int a)をvoid foo(int a, float b)に書き直したなど)。
同一ファイルであれば単語検索(*ないし#)を使えばいいんですが、大抵の場合コードが複数ファイルに跨っているので、vimgrepなりtabnewなりで虱潰しに直していく必要があります。とはいえいずれも手数が掛かってめんどくさいので、mapに登録して楽をしましょうというやつです。
というわけで、冒頭に書いた一行の各要素を解説していきます。

vimgrep

:vimgrep[word]{src1 src2 ...]

検索文字列(word)を列挙したファイル(sec1 src2 ...)から探して一覧を出力してくれます。便利。
vimgrepでググるといろいろ出てくるけど、下記がわりと簡潔でわかりやすい(個人の感想です)
https://qiita.com/tsumac/items/3972d5347a5f6e37ca09

ただデフォルトだと検索文字列もファイル名も全部手打ちで書かないといけなくてめんどくさいので、そこも自動化していきます。

*

カーソル上の単語を検索するVim標準コマンドです。すごく便利。hjklの次に重要といっても過言ではない(言い過ぎ)

/<C-r>//

「*」はファイル内検索でしか無いので、vimgrepに持っていくには一工夫が必要です。
そこでレジスタというやつを使ってやります(CPUの話ではないです)

https://qiita.com/0829/items/0b3f63798b6910623efc
↑の9. にある通り、vimでの検索文字列は「"/」なる名前のレジスタに登録されています。
このレジスタを貼り付けるにはCtrl+rのあとに/(スラッシュ)を打てばよいです。

また、左右をスラッシュで括っているのは正規表現に対応するためです。
(*での検索は単語の開始と終了を表す正規表現(<と>)がついているので)

**/*.{cpp,cu,h,hpp}

「**/」はカレントディレクトリから階層的にファイル探索する、という意味らしいです。たとえば、

src/hoge/*
src/hoge/fuga/*
src/include/foobar/*

この辺りがすべてヒットするということですね。これも便利。

また、「*.{cpp,cu,h,hpp}」は拡張子が.cpp, .cu, .hまたは.hppのファイルを指します。bashと同じです。
Pythonの人なら*.py、FORTRANの人なら*.{f,f90}などど変えればよいですね。

おまけ

併せて使うと便利そうな設定をいくつか書いておきます。

Gitで管理されているソースコードを対象としてvimgrep

Vimのコマンドモードでは任意のシェルコマンドが走るそうなので、それを使えば小題のようなこともできます。

:vimgrep[word] `git ls-list`

:cn(次の検索結果への移動)の簡略化

vimgrepでの検索結果の移動には:cnを打つ必要がありますが、数が多くなってくるとこれもわりとめんどくさいです。
これの簡略化方法としては、
① :cnをmapに登録する

~/.vimrc
nnoremap >:cn<CR>

② Quickfixを使う

~/.vimrc
autocmd QuickFixCmdPost vigrep cwindow$

の②通りが考えられますが、どちらでもお好みで良いかと思います。

参考文献(再掲含む)

  1. vimgrep & 検索と置換
    https://qiita.com/tsumac/items/3972d5347a5f6e37ca09

  2. vimのレジスタ
    https://qiita.com/0829/items/0b3f63798b6910623efc

  3. Vimのレジスタを使う
    https://qiita.com/a4_nghm/items/d29b35f5d056ef5da0d9

  4. 【vimめも】 10. マッピング
    https://qiita.com/r12tkmt/items/b89df403f587216802f1

  5. vimgrepとQuickfix知らないVimmerはちょっとこっち来い
    https://qiita.com/yuku_t/items/0c1aff03949cb1b8fe6b

さてはクソコマンドだなオメー

$
0
0

概要

ふと思い立って自作クソコマンドを作成した
環境変数について勉強できたので良かったと思う

$PATHの確認

まず自分のPCの$PATHの確認から

shell
$ echo $PATH
$ /usr/local/bin:
  /usr/bin:
  /bin:
  /usr/sbin:
  /sbin:
  /Library/Apple/usr/bin:
  /Library/Apple/bin

コマンドの作成

テキストエディタならなんでもよし 自分はvimで作成した

shell
$ vim gotohome
gotohome
cat<<EOF;
  ∧,∧
( 'ω' )つ お前は
(m9 \  帰ってよし!
  \  \
    ) ) \
  // \ \
  (_)   (_)
EOF

※shellにはprintはないので注意

完成

最後に$PATHのどこかにコピーして、すべてのユーザーに実行権限を与えて完成

shell
$ cp gotohome /usr/local/bin
$ cd /usr/local/bin
$ chmod a+x gotohome

実行してみる

shell
$ gotohome
  ∧,∧ 
( 'ω' )つ お前は 
(m9 \  帰ってよし!
  \  \ 
    ) ) \ 
  // \ \ 
  (_)   (_)

定時になったら実行したいコマンドができた

Vim Deviconsで使えるフォントにするためにnerd-fontsのパッチを当てる。

$
0
0

まえがき

こういうのとかこういうのを見て「僕もオシャンティー?なneovimにしたい」と思い調べると、Vim deviconsというものを使うみたい。
Vim deviconsをVimで使うにはnerd-fontsのパッチを当てたフォントじゃなきゃだめみたいで、そのことを知るのに一時間もかかった。Nerd Fontsを含むフォントを設定して、インストールするだけで対応するプラグインに Deviconsが表示されるようになります。と書いてあるのに…どうやら一部のフォントだけPatched Fontsと言ってすでにパッチが当てられたフォントがダウンロードできるそう。しかしパッチを当てたMenlo Fontはなかったから、自分でパッチを当てることにした。
>はコマンドです。

FontForgeeeee

パッチを当てるにはFontForgeというフォントエディタ?が必要みたいだからインストールする。

インストール

ここにインストールの方法が書いてあるので試してみる。

mkdir -p ~/src/github.com/fontforge;
cd ~/src/github.com/fontforge;
git clone https://github.com/fontforge/fontforge.git;

ok

sudo apt-get install packaging-dev pkg-config python-dev libpango1.0-dev libglib2.0-dev libxml2-dev giflib-dbg libjpeg-dev libtiff-dev libspiro-dev build-essential automake flex bison;

okじゃない、

E: Unable to locate package giflib-dbg

giflib-dbgが見つからないみたい。

対処その一

~/etc/apt/sources.listに

deb http://archive.ubuntu.com/ubuntu bionic main universe
deb http://archive.ubuntu.com/ubuntu bionic-security main universe
deb http://archive.ubuntu.com/ubuntu bionic-updates main universe
deb [arch=ppc64el,amd64,arm64] http://ftp.utexas.edu/mariadb/repo/10.3/ubuntu bionic main

を追加する。それで、

> sudo apt update

 > sudo apt install giflib-dbg
E: Unable to locate package giflib-dbg

うまくできませんでした。

対処その二

ubuntu packagesでどのリポジトリか調べる、そして見つかったらamd64をクリック、リポジトリが書いてあった。

deb http://cz.archive.ubuntu.com/ubuntu xenial main

sources.listに追加する、それから

> sudo apt update

 > sudo apt install giflib-dbg
E: Unable to locate package giflib-dbgsudo
E: Unable to locate package install

 > sudo apt-get install giflib-dbg
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 giflib-dbg : Depends: giflib-tools (= 5.1.2-0.2) but 5.1.4-2 is to be installed
              Depends: libgif7 (= 5.1.2-0.2) but 5.1.4-2 is to be installed
              Depends: libgif-dev (= 5.1.2-0.2) but 5.1.4-2 is to be installed
E: Unable to correct problems, you have held broken packages.

うむ、上手くいかんaptとapt-getで何が違うのかは調べないとわからないが、上手く行かない。
一回、autoremoveしてみてはどうだろうか?

> sudo apt autoremove giflib-dbg
 > sudo apt install giflib-dbg

上手く行かない、ここでSoftware Managerでインストールできることを知る。
検索:fontforge
fontforge:インストール、クリック。
パスワード:***********
依存〜〜〜:インストール
完了。

nerd-fonts

Fonts Patcherをダウンロードする。

ダウンロードして使えるようにする

ここにアクセス。
緑色になっているclone or downloadをクリック、Download ZIPをクリックでダウンロード。
ダウンロードできたら、解凍してnerd-fonts-master(フォルダ)をhomeディレクトリに配置、それで

> fontforge -scrpt  <font-patcher_PATH> <font_PATH>

でおそらくok、僕の場合は、

> fontforge -script ~/nerd-fonts-master/font-patcher ~/.fonts/Menlo-Regular.ttf

Nerd Fonts: configparser module is probably not installed. Try `pip install configparser` or equivalent

しかしここで問題発生、言うとおりにしてみると、

> pip install configparser
zsh: correct 'pip' to 'pip3' [nyae]?

 > pip3 install configparser

pip3の方は上手く行ったが、Nerd Fonts: configparser module is~~~の問題は、解決しない。ここでこんなものを発見、ドンピシャでごわす。ここに書いてあるとおりにしてからもう一度やってみると、

> sudo apt install python-configparser

 > fontforge -script ~/nerd-fonts-master/font-patcher ~/.fonts/Menlo-Regular.ttf
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
~~ ~~ ~~ ~~ ~~ ~~ 
Adding 53 Glyphs from Seti-UI + Custom Set 
╢████████████████████████████████████████╟ 100%
Adding 198 Glyphs from Devicons Set 
╢████████████████████████████████████████╟ 100%

Done with Path Sets, generating font...

おおおおおおおおーー、やったぜ!!上手く行きました!!、それで~/nerd-fonts-masterを見るとMenlo Regular Nerd Font.ttfというファイルが生成されています。このファイルを~/.fontsにコピー、で僕はTilixを使ってるからProfiles→Edit Profile→フォントウィンドウをクリックしてさっき生成したフォントを選択、それで完了。

確認 and 振り返り

neovimを開く。上手くアイコンが表示されました。
vim001.png

やること自体はすごく簡単でしたが僕の情報収集能力が低いせいか、二、三時間かかりました。

参考サイト

http://yukimemi.github.io/post/2017-10-07_use-vim-devicons/
https://tmnm.tech/2017-10-11-vim-setting-with-cica/
https://crowrabbit.hatenablog.com/entry/2019/05/19/ubuntu%E3%81%ABNerd-Fonts%E3%82%92%E5%B0%8E%E5%85%A5
https://qiita.com/nechinechi/items/27f541849db04123ea15

間違っているところなどあれば指摘してもらえると感謝します。
編集(2019.07.01) タグ修正しましたよっと。@shiracamusさんありがとうございます。

使っているvimプラグインURL一覧

$
0
0

https://github.com/Shougo/neosnippet.vim
https://github.com/Shougo/neosnippet-snippets
https://github.com/vim-scripts/vim-auto-save
https://github.com/tomtom/tcomment_vim
https://github.com/terryma/vim-expand-region
https://github.com/bronson/vim-trailing-whitespace
https://github.com/vim-airline/vim-airline
https://github.com/airblade/vim-gitgutter
https://github.com/ctrlpvim/ctrlp.vim
https://github.com/tpope/vim-endwise
https://github.com/Townk/vim-autoclose
https://github.com/scrooloose/nerdtree
https://github.com/jistr/vim-nerdtree-tabs
https://github.com/Xuyuanp/nerdtree-git-plugin
https://github.com/Shougo/neocomplete.vim
https://github.com/Shougo/neosnippet.vim
https://github.com/Shougo/neosnippet-snippets
https://github.com/thinca/vim-quickrun
https://github.com/Yggdroot/indentLine
https://github.com/rhysd/accelerated-jk
https://github.com/tyru/caw.vim
https://github.com/tyru/open-browser.vim
https://github.com/tpope/vim-fugitive
https://github.com/simeji/winresizer
https://github.com/rhysd/accelerated-jk
https://github.com/Shougo/vimproc.vim
https://github.com/vim-scripts/taglist.vim
https://github.com/ervandew/supertab
https://github.com/osyo-manga/vim-monster
https://github.com/todesking/ruby_hl_lvar.vim
https://github.com/ngmy/vim-rubocop
https://github.com/ElmCast/elm-vim
https://github.com/mechatroner/rainbow_csv
https://github.com/mattn/emmet-vim
https://github.com/plasticboy/vim-markdown
https://github.com/aklt/plantuml-syntax
https://github.com/pangloss/vim-javascript
https://github.com/othree/yajs.vim
https://github.com/othree/es.next.syntax.vim
https://github.com/othree/javascript-libraries-syntax.vim
https://github.com/othree/html5.vim
https://github.com/maxmellon/vim-jsx-pretty
https://github.com/ternjs/tern_for_vim
https://github.com/udalov/kotlin-vim
https://github.com/othree/yajs.vim

Docker内でvi使えなかった時の対処

$
0
0
  • 0.こんな時の対処
  • 1.containerにログイン
  • 2.Vimのインストール

0.こんな時の対処

・コンテナ内でvi/viewコマンド使おうとしたら「Command not Found」になった

1.containerにログイン

・docker container exec -ti コンテナ名 bash

2.Vimのインストール

OSによってインストール方法が変わる。

・Linux系

yum install vim

・Debian/Ubuntu系

apt-get update
apt-get install vim

vimで困った時のメモ

環境依存のファイルを .gitignore に含めずに ignore する方法

$
0
0

はじめに

複数人で開発している時、人によって OS や エディタが異なるため、環境依存の一時ファイルなどを ignore に入れるのはよくありません。 Vim が生成するスワップファイル ( *.swp など ) や Mac が生成する .DS_Store など、他のメンバーには関係のない環境依存のファイルの ignore の方法を知ったので備忘録として残しておきます。

設定方法

Git の公式ドキュメントに記載されていたので引用します。

https://git-scm.com/docs/gitignore

Which file to place a pattern in depends on how the pattern is meant to be used.
* Patterns which a user wants Git to ignore in all situations (e.g., backup or temporary files generated by the user’s editor of choice) generally go into a file specified by core.excludesFile in the user’s ~/.gitconfig. Its default value is \$XDG_CONFIG_HOME/git/ignore. If \$XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/ignore is used instead.

つまり、 $XDG_CONFIG_HOMEの設定がある場合は $XDG_CONFIG_HOME/git/ignore、ない場合は ~/.config/git/ignoreに設定すれば良さそうです。

Vim のスワップファイルと Mac の .DS_Store を除外する場合は以下を配置すれば OK。スワップファイルは .swp とか .swo とか何種類かあるので ?でパターンマッチさせます。

~/.config/git/ignore
.DS_Store
*.sw?

以上。

関連記事

mintty で動く最新の Vim を build する

$
0
0

経緯

1. 環境の変化

お仕事で使う環境が Git Bash (mintty) -> SSH -> Linux からがっつり Windows になった。Windows でも最新の Vim を、かつ使い慣れた mintty で使いたかった。

2. mintty で動く Vim の build 手順がなかった

Vim の INSTALLpc.txtには、Windows native で動く Vim の build 手順はあるが、mintty で動作する Vim の build 手順がなかった。

手順

vim-jp の方々に相談。蓋を開けてみれば、Linux で普通に build する手順とあんまり変わらなかった。知っている人にとっては当たり前のことだったのかも。。とりあえず一番シンプルな状態での build。
1. MSYS2をインストール
2. pacman -Syuu
3. 強制終了して再度アップデートするようにリクエストされると思うので、ウィンドウを閉じて再起動。
4. もう一度 pacman -Suu
5. pacman -S gcc git base-devel ncurses-devel libiconv-devel
6. git clone https://github.com/vim/vim
7. cd vim/src
8. ./configure --with-features=huge --enable-fail-if-missing
9. make -j
10. make install

参考

MSYS2 ちゃんと使ったことなかったので参考になりました。
https://qiita.com/k-takata/items/373ec7f23d5d7541f982

Special Thanks

いつもどうもありがとうございます。
@k-takata, @mattn

vimを使うとき十字キーで移動して、vimmerに殺されるその前に

$
0
0

はじめに

あなたがこの記事を読んでいると言うことは、私はすでにこの世にはいないのでしょう。

最後に、あなたに私の犯した罪を告白します。
そうです、vimでの移動に十字キーを使っていたのです。

この事実を知ったvim教の信者たちが血眼になって私を探しています。
きっと、私は見つかるでしょう。
そしてMacBookの十字キーを全て剥がされ、Logicoolの青軸キーボードで撲殺されるのです。
それほどまでに私の罪は重いということは重々承知しています。

もし、これを読んでいるあなたが私と同じ業を背負っているのであれば今すぐ逃げてください。vimmerはどこにでも潜んでいます。
今日笑顔で話していた同僚が明日にはキーボードで殴りかかってくるかもしれないのです。
だからせめて、私のささやかな抵抗をここに書き記します。
あなたが私と同じ道を辿らないことを願って・・・・

escは海よりも遠いということ

そもそもの始まりはiを押した挿入モード状態で移動するという考えを捨てることからです。
挿入モードで移動することは容易ではありません。
生き延びるためにはまず、 escを押し、標準モードで移動することを心がけなければなりません。

・・・ええ、わかっています。
そんな簡単な話であれば私がこうしてvim教から迫害されることもなかったでしょう。
標準モードに戻るためのescは海よりも遠い場所にあります。
あなたがもしMacBookで、しかもTouch Bar搭載モデルであるならばその道はより険しく、辛いものになるはずです。
vimmerの洗礼は小指の腱がちぎれるほどescを押す訓練から始まります。
ですが、我々は違います。私の友人たちは皆ここのescを押せなかったがために十字キーで移動し、vimmerに命を奪われました。
そうならないための方法が1つだけあります。

Ctrl + cです

これでescを押すことなく標準モードに戻れるのです。
あなたが私や私の友人たちと同じ道を辿ることは、私も、私の友も望んでいません。
どうか上のコマンドを覚えてください、ほんの少し標準モードに戻りやすくなったはずです。

過ちとはj,k,h,lだけで移動しようとすることです

標準モードに戻れたならあとは移動するだけ、そう思っていました。
十字キーに慣れた私はここでもう一つの、もっと根本的な過ちを犯したのです。
そうです。j,k,h,lこの4つのキーを十字キーと同じ感覚でつかおうとしたのです

ただカーソルを移動させるだけならマウスの方が早いのです。
vimではそんなものは認められません

だからと言って、今から全ての移動コマンドを記憶しようとすることは聡明ではないでしょう。
山のような数のkeymapを覚えている間に殺されてしまいます。

私が書き記すのはvimmerになるための術ではありません。
vimmerに殺されないための術です。

まずページを送りたいならCtrl + dで画面分下に進めます。
上に送りたいならCtrl + bです。
あなたが慎重であれば半ページ送りがいいと望むでしょう。
そんな時はCtrl + u/Ctrl + fを使うことを勧めます。
もっと大きく、ファイルの先頭に行きたいならばgg
逆にファイルの終わりに行きたいのであればShift + Gでたどり着けるでしょう。

当然ページ移動だけできたところで無力です。
カーソルが動かなければそれは生きていないことと同義です。
:行番号で指定した行に移動できます。
しかし、ああ、なんということでしょうか。開いただけのviでは行番号がわからないのです。

:set numberで表示させてしまうことをご存知であればあなたは幸運です。
しかし我々が悠長にnumberと打とうものならvimmerは我々の愛する人を殺せるでしょう。

:set nuです。
我々に残された道はそこしかなかったのです。
より聡明なであるならば事前にgrep -nして行を特定しておくこともできるでしょう。
私はもちろんこの方法を使いました。
しかし、足りなかったのです。

grepに複数引っかかった時、全ての番号を記憶することは私には不可能に思えました。

そこで/です。
標準モードで/を押し、調べたい単語を入力することで検索ができるのです
次の検索箇所まで移動したい場合は
nを押すといいでしょう。
Shift + nを押せば前の検索箇所まで戻れるでしょう。

やるベきことがあるのなら、たどり着いた先でfを押しなさい

ここまでくればあなたはたどり着くべき行に辿りつくことができるはずです。
まるで自分がvimmerになったかのような優越感さえ感じるかもしれません。
その油断こそが私の犯した最大の罪です。
私はたどり着いた安堵感と、緊張からの開放からiを押しキーでカーソルを右に移動させてしまったのです。
ほんの少しであっても十字キーに触れるエンジニアをvimmerは許しはしません。

あの時私はfで移動するべきだったのです。
f + 文字でカーソル以降、 行内で次の該当文字まで移動することができます。
例えばf + tなら引っかかるのはtです。
すでにカーソルが、その箇所を過ぎていたならF + 文字で後ろに進めるでしょう。
2文字以上は打てません。1文字だけです。

あるいは、wを押すことでも私には違った道が残されていたでしょう。
単語単位で移動ができます。
戻りたくなったならばbを押すといいでしょう。
l,hで横に進むよりははるかに早いはずです。

単語の末尾に移動したい?そんな時はeを押すといいでしょう。
きっとあなたの助けになるはずです。

そうだ、念の為これも伝えておきましょう
^で行頭、$で行末です。

iで挿入している限り、彼らは我々を許しはしない

ここまでできたあなたはもう恐れるものなどないかもしれません。
しかし、私は肝心なことを伝え忘れていました。
あなたが文字を挿入する時iで挿入モードに入っているならばキーを使うのは避けられないことでしょう。
そう・・・たとえ行末に移動したところでiを押した時点で入力は末尾からにはなりません
で右にカーソルをずらさない限り不可能なのです。そうです、彼らは我々を許しはしません。
iで挿入している限り.....

あなたに残されたたった一つの希望を伝えます。
よく聞いてください。

aを押すのです。
カーソルの後ろから文字を挿入できます。
全ての文字をaで入力しろというのではありません。
iaを使い分けて初めてvimmerの魔の手から逃げ切れることができるのです。

もし、あなたが該当の行にすでにたどり着いており、
行末に文字を挿入したいならば$を押す必要はありません。
Aを押しましょう。きっと望む未来はすぐそこです。

手にいれた自由のその先に行くならば

これであなたは十字キーに触れることなくvimでの編集ができることでしょう。
vimmerもこれ以上あなたの命を狙おうとはしないはずです。

しかし、あなたがもし私の友人の仇をとりたいと願うならば
より深くvim教を知る必要があるでしょう。

ここで紹介したものはほんの1部です。vimにはまだまだ様々なコマンドがあります。
Qiitaには先人たちの残したvim教の経典が数多く眠っています。
そうした記事はきっとあなたの助けになってくれるはずです。

脱初心者を目指すなら知っておきたい便利なVimコマンド25選 (Vimmerレベル診断付き)
Vim幼稚園からVim小学校へ

もしかしたらあなた自身がすでにvimmerになっているかもしれません。
それもまたいいでしょう。
人の幸福は、本人の努力でよってのみ得られるものなのですから。

どうやら、私はここまでのようです。
青軸キーボードのタイプ音がすぐそこまで迫ってきました。

私の罪は決して消えませんが
あなたがこれを読んでくれたことで、私の魂もいくばくか救われたことでしょう。

感謝のしるしに、この先のあなたの人生が幸福なものであるように祈ります。
十字のキーに願いを込めて.....

2019.07.07

vimtexにおいてmintedを使う時の設定

$
0
0

はじめに

日頃からvimtexを使っているが、コードをレポートに記述する際listingsというパッケージよりmintedというパッケージの方が綺麗にコードが載せられそうだったので、使おうと思った時ハマったことについてかく。

インストールなどについてはこの記事が丁寧に書いてくれてるので省略します。

minted VS listings

listings_vs_minted.png

mintedlistingsの大きな違いは、mintedは外部ライブラリを用いてシンタックスハイライトをするのに比べ、listingsはtex内でハイライト作業を行う。
したがって、この2つのパッケージの差はこの違いによって生じる。

listingsはtex内でコンパイル・ハイライトを行うので簡単に行える上、ユーザ定義がしやすいというメリットがある。逆にいうと、ユーザが定義をしないとハイライトができないというデメリットがあるとも言える。

逆に、mintedはPygmentsというPythonのシンタックスハイライトライブラリを用いるので、ユーザが定義をせずとも綺麗にコードをハイライトしてくれる。
言語もほとんど対応しているのは嬉しい。
また、スタイルをいちいち記述する必要はなく、Pygmentsですでにある以下のスタイルを用いることができる。

['default', 'emacs', 'friendly', 'colorful', 'autumn', 'murphy', 'manni', 'monokai', 'perldoc', 'pastie', 'borland', 'trac', 'native', 'fruity', 'bw', 'vim', 'vs', 'tango', 'rrt', 'xcode', 'igor', 'paraiso-light', 'paraiso-dark', 'lovelace', 'algol', 'algol_nu', 'arduino', 'rainbow_dash', 'abap']

しかし、この外部のライブラリを読んでいるからこその問題が発生した。

問題

vimtexにて、

\usepackage{minted}

とすると

error| Package minted Error: You must invoke LaTeX with -shell-escape flag

と怒られてしまった。要は、外のライブラリを読みたいんだけど読めないということだった。
texは-shell-escapeを許さない仕様になっているので、使えなかったっぽい... (セキュリティ的にも安全ではないので納得)

latexmkrcを書けば良いという記事をいくつか見つけたが、それもうまくいかず(というかあまり気にくわない)、本家のレポジトリissueを見ていたらやはり多くの人がこの問題に突っかかっていた。

以下のように、vimtex_compiler_latexmkoption-shell-escapeを追加したところうまくいった:

letg:vimtex_compiler_latexmk={        \'backend':'nvim',        \'background':0,        \'build_dir':'',        \'continuous':1,        \'options':[        \'-pdfdvi',        \'-verbose',        \'-file-line-error',        \'-synctex=1',        \'-shell-escape',        \'-interaction=nonstopmode',        \],        \}

最後に

正直、-shell-escapeを常に許していると怖いので、使わないときはコメントアウトしようかと思う

参考サイト

gtags (GNU global) で、関数の位置がうまく認識されずずれてしまっているときの対処

$
0
0

現象

:Gtags -f %をやってみたが、会社独自の define などが使われているせいか関数の先頭がうまく認識されず、少しずつずれている。

解決方法

.notfunction ファイルを作成して、除外したいシンボルを追記する。
https://www.gnu.org/software/global/manual/global.html#FILES-1

独り言

gtags.conf についても勉強したいなぁ。。

【Vim】dein.vimのインストール

$
0
0

dein.vim(vimのプラグイン管理ツール)をインストールする。
https://github.com/Shougo/dein.vim

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

テンプレートとなるdein Scriptsが出力されるので.vimrcに記載する

"dein Scripts-----------------------------
  7
if &compatible
  set nocompatible               " Be iMproved
endif

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

" Required:
if dein#load_state('/Users/hoge/.cache/dein/')  call dein#begin('/Users/hoge/.cache/dein/')
  " Let dein manage dein
  " Required:
  call dein#add('/Users/hoge/.cache/dein//repos/github.com/Shougo/dein.vim')
  " Add or remove your plugins here like this:
  " call dein#add('Shougo/neosnippet.vim')  " call dein#add('Shougo/neosnippet-snippets')
  " 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-------------------------

これでdein.vimを使う準備はOK。
次に、インストールしたいプラグインを記載する。

" 例としてNERDTreeToggleのプラグインcall dein#add('scrooloose/nerdtree')

インストールコマンドを打つとインストールが実行され、プラグインを使えるようになる。

:call dein#install():NERDTreeToggle

NERDTreeToggleがインストールできた。
image.png


Vim script で画面に表示中の行番号だけ取得する

$
0
0

表示している範囲の行だけ欲しい

Vimで画面に表示している範囲の内容だけ欲しいので、表示している行番号のリストがとれればなーとか思ったのですが、なかなかスマートな取得方法に辿り着かなかったので、共有も兼ねて記しておきます。

何が問題か

echo getline('w0','w$')

上記のようなw0w$という便利な記法があるのですが、w0w$を指定することで、表示されている一番上の行番号と下の行番号を指定することができるのです。

ですが、これで表示している範囲だけ取れると思って使っていると、折りたたみ(fold)があると不都合が起きます。

下記のような折りたたみがあるファイルでの結果は

test.vim
" vim: foldmethod=marker

aaaa                    

" {{{                   

bbbb                    

" }}}                   

cccc                                      

(↓↓↓結果のスクショ。最下行がecho getline('w0', 'w$')の結果)
スクリーンショット 2019-07-06 1.57.52.png

結果
['" vim: foldmethod=marker','','aaaa','','" {{{','','bbbb','','" }}}','','cccc']

foldで非表示になっている内容も取れてしまうんですよね。これだと、折りたたみの行数が大きいほど無駄に内容取得されてしまって困っちゃいます。

(私はここで、getline('w1')getline('w2')...と1行ずつ順番にアクセスしていけば、表示している内容だけ取れるのではと思ったのですが、w0が特別なだけで、w1、w2...なんてものは無いんですよね...うーむ。)

解決方法

ループしつつfoldclosed()foldclosedend()を使って非表示行をスキップします。
foldclosed()は、もし引数の行番号が畳まれていた場合はfoldの開始行番号を返し、foldclosedend()は引数の行番号が畳まれている場合はfoldの終了行番号を返します。

ドキュメントはこちら
https://vim-jp.org/vimdoc-ja/eval.html#foldclosed()

サンプルを書いてみました。
行番号だけ欲しければ、l:current_lineをよしなに使ってください。

サンプル
function! EchoDisplayedAll()letl:lines =[]letl:current_line = line("w0")letl:end_line = line("w$")while1if foldclosed(l:current_line)>0letl:current_line = foldclosedend(l:current_line)+1endififl:current_line >l:end_line
            breakendifcall add(l:lines, getline(l:current_line))letl:current_line =l:current_line +1endwhile

    echo l:lines
endfunction

先程のテキストでの結果は以下の通り。

(↓↓↓call EchoDisplayedAll()の結果)
スクリーンショット 2019-07-06 2.28.51.png

結果
['" vim: foldmethod=marker','','aaaa','','','cccc']

これでVim scriptで表示されている範囲だけ取得することができました💪

ChromebookでVimをビルドしてインストールする方法

$
0
0

プライベートではChromebookを使用している僕ですが、Crostini(Linuxサポート)に入っているVimがversion8.0でterminal機能使えなかったり、clipboardが無効化されてたりしていました。
上記を解決するためにVimをビルドしてインストールしたので手順を備忘録用にまとめておきます。

ビルドまでの手順

1.ソースコードのclone

$ cd /opt/
$ sudo git clone https://github.com/vim/vim 
$ cd vim/

2.依存パッケージの取得

$ sudo apt build-dep vim
Reading package lists... Done
E: You must put some 'source' URIs in your sources.list

E: You must put some 'source' URIs in your sources.list
のエラーが出た場合は下記のように対処しました。

sources.listを開く

$ sudo vim /etc/apt/sources.list

sources.listの中身を下記に編集

deb http://deb.debian.org/debian stretch main                                 
deb-src http://deb.debian.org/debian stretch main

deb http://deb.debian.org/debian-security/ stretch/updates main
deb-src http://deb.debian.org/debian-security/ stretch/updates main

deb http://deb.debian.org/debian stretch-updates main
deb-src http://deb.debian.org/debian stretch-updates main

3.makeとinstall

$ sudo ./configure --with-features=huge \
 --with-x \
 --enable-multibyte \
 --enable-luainterp=dynamic \
 --enable-gpm \
 --enable-cscope \
 --enable-fontset \
 --enable-fail-if-missing \
 --prefix=/usr/local \
 --enable-gui=auto \
 --enable-gtk2-check \

$ sudo make
$ sudo make install

4.確認

$ vim --version
VIM - Vi IMproved 8.1 (2018 May 18, compiled Jul  7 2019 15:20:01)
Included patches: 1-1640
Huge version with GTK2 GUI.  Features included (+) or not (-):
+acl               -farsi             -mouse_sysmouse    -tag_any_white
+arabic            +file_in_path      +mouse_urxvt       -tcl
+autocmd           +find_in_path      +mouse_xterm       +termguicolors
+autochdir         +float             +multi_byte        +terminal
-autoservername    +folding           +multi_lang        +terminfo
+balloon_eval      -footer            -mzscheme          +termresponse
+balloon_eval_term +fork()            +netbeans_intg     +textobjects
+browse            +gettext           +num64             +textprop
++builtin_terms    -hangul_input      +packages          +timers
+byte_offset       +iconv             +path_extra        +title
+channel           +insert_expand     -perl              +toolbar
+cindent           +job               +persistent_undo   +user_commands
+clientserver      +jumplist          +postscript        +vartabs
+clipboard         +keymap            +printer           +vertsplit
+cmdline_compl     +lambda            +profile           +virtualedit
+cmdline_hist      +langmap           -python            +visual
+cmdline_info      +libcall           -python3           +visualextra
+comments          +linebreak         +quickfix          +viminfo
+conceal           +lispindent        +reltime           +vreplace
+cryptv            +listcmds          +rightleft         +wildignore
+cscope            +localmap          -ruby              +wildmenu
+cursorbind        +lua/dyn           +scrollbind        +windows
+cursorshape       +menu              +signs             +writebackup
+dialog_con_gui    +mksession         +smartindent       +X11
+diff              +modify_fname      -sound             -xfontset
+digraphs          +mouse             +spell             +xim
+dnd               +mouseshape        +startuptime       +xpm
-ebcdic            +mouse_dec         +statusline        +xsmp_interact
+emacs_tags        +mouse_gpm         -sun_workshop      +xterm_clipboard
+eval              -mouse_jsbterm     +syntax            -xterm_save
+ex_extra          +mouse_netterm     +tag_binary        
+extra_search      +mouse_sgr         -tag_old_static    

参考

https://vim-jp.org/docs/build_linux.html
https://wiki.debian.org/SourcesList

vimでマークダウンファイルをリアルタイムプレビューする

$
0
0

これまで使っていたマークダウン関連のプラグインが何故か動作しなくなっていて、原因探るのも面倒くさかったので、何か新しいプラグインとか開発している人がいるんじゃないか、と思って探したら、いました。

https://github.com/iamcco/markdown-preview.nvim

starもいっぱい付いてるし、READMEも充実してるし、ということで試してみました。

インストール

プラグインの管理にはvim-plugを使っているので、設定ファイルに以下の記述を追加して、:PlugInstallします。

" markdown plugin
Plug 'iamcco/markdown-preview.vim', { 'for': ['markdown'] }

使い方

テキトーなマークダウンファイルを開いて編集後、:MarkdownPreviewコマンドを叩きます。

ブラウザのタブが開いてプレビュー開始。

毎回、MarkdownPreviewを打ち込むのはツライので、ノーマルモードで;;pと打ち込むとプレビューを開始するようにしました。

" ---------------
" markdown-preview.vim setting
" ---------------
nnoremap <silent> ;;p :MarkdownPreview<CR> " ;;pでプレビュー

感想

編集位置に合わせてスクロールも追随してくれるし、GitHub Flavored Markdownのテーブル記法などにも対応していて、機能としては十分だと思いました。

試していませんがmermaidとか、そのあたりの記法にもしっかり対応しているようで、starがたくさん付いてるのもうなづけます。

動作としては特にこれまで使っていたプラグインとは特に差はないんですが、プラグインだけインストールすれば、とりあえず動作する、とか導入が簡単なのは良いな、と思いました。

自分用 VSCODE 設定MEMO

$
0
0

PCの移行時に困らないよう、VSCODEの設定を記録しておく

PC側の設定

vimでnormal modeに戻る際に、日本語入力をオフにする。

vimで日本語を書いているときにnormal modeに戻るときは、ほとんどの場合移動などのvimのコマンドを押したいことが多い。そのためには日本語入力をオフにする必要があるため、毎回「Esc」→「半角」を押す必要がある。毎回押すなら「Esc」キーに両方に当てはめてしまって手間を省こう。
https://qiita.com/stackline/items/6a2e56e1f439cc47b098

setting.json

{//システムのclipboardにコピー"vim.useSystemClipboard":true,//easymotion"vim.easymotion":true,//カーソル上にあるワードを"*"で検索"vim.visualstar":true,//諸々のctrlキーを使った操作が有効になる"vim.useCtrlKeys":true,}

まだトラックパッドで消耗してるの?(キーボードだけで操作する簡単なショートカットキー)

$
0
0

Macのトラックパッド操作しづらくない?

いや操作しやすいですよ?
でもキーボードには負けるじゃないですか?
そうですよね?(威圧)

なのでChrome+Macな環境で自分がほぼキーボードのみで操作している方法を紹介します。

アプリケーションの切りかえ

Spotlight検索

command+スペースキー

起動済みアプリケーションの切り替え

command+タブキー

Chromeのショートカットキー

タブの切り替え

command+option+方向キー右or左

もしくは

コントロールキー+タブキー

タブを閉じる

command+W

Vimium

Vimiumを入れるととても便利です。
記事がたくさんあるので細かい説明は割愛しますが私からはこれだけ。
Vimmerじゃなくてもタッチタイピングできれば絶対、ブラウジングが快適になります。

Viewing all 5720 articles
Browse latest View live


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