情報廃棄物最終処分場

情報の芥溜にも何か使い道があるかもしれない。Webと鉄道とバイクと音楽が好きな人の情報置き場

Vimを使い倒す ~今すぐ使える逆引き辞書(にしていきたい)~

自分のVim辞書。
操作というより、いじり方メモ。

想定される環境

  • neovim
    vim8と違う部分もありそう。
  • debian系、もしくはwsl
    macでも切り分けて使っているので、ちょっとひねってください。

vimの疑問

マッピングでよく見る :<C-u> ってなんや

その位置までの入力を消する
誤動作防止。
vim-jp » Hack #35: ex コマンドを実行するキーマッピングを定義する
試しに、:でコマンドモードに入ってから何かを入力し、<C-u>すると:だけ残る。
キーバインドの直前に数字なんか入れてしまったときに大変なことにならないよう、
これで初期化してる感じか。

逆引き

プロジェクト全体から検索したい

grepを使う。
だと少し遅いのでag(the_silver_searcher)を使う。
また、操作系にはDenite.nvimを使用。

$ sudo apt install silversearcher-ag

追記: 19.05.15 FZFを入れた

最近、全文検索用にfzfを導入。単体でもファイル名の適当検索ができ、使い勝手が良い。
fzf.vimの調子がよく、もっぱらこちらで使う。
以下deinでのインストール。

[[plugins]]
repo = 'junegunn/fzf'
build = './install --all'
[[plugins]]
repo = 'junegunn/fzf.vim'
hook_add = '''
  nnoremap <C-p> :FZFFileList<CR>
  command! FZFFileList call fzf#run(fzf#wrap({
    \ 'source': 'find . -type d -name .git -prune -o ! -name .DS_Store',
    \ 'down': '40%'}))
'''

fzf自体のインストールとfzf.vimが一緒になっている。
宗教上の理由でfzfを別のパッケージマネージャからインストールする必要のある方は上3行削除のこと。

参考元: Vimメモ : fzf(fuzzy finder)と連携するfzf.vimの使い方 - もた日記

文字コード変換したい

文字コードを CRLFからLFに変えたりとかしたい。
コマンドモードで

:setl ff=unix
:w

フォーマットは、
LF => unix
CR => mac
CRLF => win
で書き換える。

以下でも行けるが、置き換えが必要。
^MはCRを表すもの。<C-v> <C-m>で入力できる。

:e ++ff=unix
:%s/^M//g
:w

参考:vimで改行コードをCRLF(dos)からLF(unix)に修正する - Qiita

ひとこと

linuxbrewつかってみたい

PHP デバッグジンジャ(業務デバッグメモ)

デバッグジンジャ

togetter.com

二礼二拍手一礼しなくても大丈夫なように。

共通

Chromeの開発ツールの使い方

https://www.buildinsider.net/web/chromedevtools/01

DB

SQL文エラー

PHPMyAdminSQLを実行してみる。

PHP

500エラーの対応

スタンドアロンPHPが動く環境があれば、

php -l 'path/is/here.php'

もしくは、IDEの静的解析 or linter
VSCodeだとLSP使われてるのでそれつかうとか

行番号の表示

echo '*' . __line__; // 行数を表示する ex. *141  
exit; // ここで処理終わらせて様子見

変数の中身をみる

var_dump($変数)でもいいが、var_export($変数)のが見やすい?らしい
要検討
■ 追記
var_exportは、echoまでやってくれた。 var_dumpはechoすれば別にいいし、型まできっちり出てくれるので、その方がいいときはこちら。

最初に楽をし、後から苦労する、Vim入門のすゝめ

この記事は、

  • Vim始めたかったけど何度か挫折してる人。
  • 楽にVimの良さを体感したい人。
  • 手っ取り早くかっこいいVimを手に入れたい人。

を対象にしています。

小生の方針・記事の心得

  • 何事も我慢では始まらない。他人の設定やプラグインを使いまくり、ある程度最初は楽をしよう(提案)。
  • マウスに手を伸ばすこと、escを叩くのに小指を動かすことが億劫だ、と一瞬でも思ったら、そこがVimのスタートライン。そこに立つまでは意地でも使い続けよう。
  • 一行消すのに「挿入モードでdelete長押しor連打」なんて冗長な操作をしてしまったらuでもとに戻しdcでなんとかする。心を鬼にし、体で覚えるのだ。
  • Vimの道は果てしなく長い。一度にすべて覚えず、少しずつ覚えて作業を楽にしていきたい、という程度の気持ちで。気長に。
  • 思考のスピードで編集できるようになる、その日まで。俺たちの戦いはまだ始まったばかりだ!
    oratake先生の次回作にご期待下さい!【おわり】

契機

今更だが、Vimに入門した。
いや、正確には7年前ぐらいからCentOS 5(当時は6が出てすぐぐらいだったと記憶している)をいじっては壊ししている時から入門はしていたのだが、
i<Esc>しか使っていなかったので、PHP屋になった今回を契機に、再度門を叩こうという寸法だ。

参考・パクリ・バイブル

qiita.com
人によって進み方は違う。この人のように、自分の使えるようになった順で記録しておき、誰かの役に立てばいいなと思い、今回筆を執った次第だ。


www.amazon.co.jp
必携、実践Vim。つべこべネットで調べてやる前に、近所の技術書がそこそこある書店に行き、実践Vimを購入しよう。
最初から読む必要はなく、大体の見出しを確認し、やりたいことが出たときに引く逆引き。
大体やりたいことが載ってるからすごい。Vimすごい。ってなる。


vim-jp.org
こちらはVim8の日本語マニュアル。
一応こちらにも逆引き的なものがある程度あり、やはり参考になる。
下で紹介しているneovimと大体同じように使えるので、大丈夫大丈夫。
俺も使ってるんだからさ(同調圧力

JUST DO IT

1. 環境をつくる

会社のPCがWinであったため、Windows介助に関する記述があるかもしれないが、
基本はmac, linuxでも同じことができるハズ。
ちなみにプライベートのmacでは元気に、綺麗に(重要)動いている。

さて、Vimを始めるには幾つか方法がある。

  1. vim.exeやなどのGUIなソフト
  2. VSCodeVimエミュレータ入れる
  3. 漢は黙ってCUIコマンドライン

最も初心者に優しいのはGUIを使うこと。 最近、VSCodeVimエミュレータがあることを知ったので、それで使ってもいいかも。わりと機能が網羅されていて驚いた。ただ、設定ファイルがそのまま使えないので、一長一短。入りとしてはオススメできるかと。
バックエンド目指すならCUI一択かな?

github.com

GUICUIともにひとまずこれを勧めておく。
CUIはいくらでもインストール方法が転がってるので 「neovim 自分のOS」とかで探して。どうぞ。
基本、brewとかyumとかパッケージマネージャで導入する癖をつけるとシアワセ。
しかし、小生のaptではちょっとneovimが古いので、私はビルドして使っている。(前言撤回)

neovimは最近盛り上がっているvimの派生。
ちゃんとvimとして使えるので、まずこれ使っときゃ間違いない。と思う。

qiita.com

基本(やるとは言っていない)

こんな場末の記事を見ているなら、
hjklで左下上右移動、
iでInsertモード、
EscでNomalモードに戻る、ぐらい知っている前提でいく。
vimtutorの2か3ぐらいまで行ったらもどってくるがいい。

1. ヤンク(y)とプット(p)

vimのコピー&ペーストは、それぞれYank,Putという。
複数行を指定してヤンクするには、コマンドが便利。
10から21行目までなら、

:10,21y

でヤンクできる。

1. テキストオブジェクトを使う

コードを書いているとこんなタイミングによく出くわす。

// ダブルクォートの中をcheckboxからradioにしたい
<input type="checkbox">
// <?php ~ ?>を一気に消したい
<?php
  // 複数行に渡るphp
?>

こんなときに使えるのが、Vim7ぐらいから追加されているテキストオブジェクト。

1. マクロを使ってみる

さて、こんなものが来た。

<input type="radio" 省略 >
<input 省略 type="radio" 省略 >
<input type="radio" 省略 >
<input 省略 type="radio" 省略 >
続く...

この状態で、typeをradioからcheckboxに直せという。
せめてtypeは一番前に持ってこいと言いたい気持ちをぐっと抑え、
マクロを使ってみることに。

まずノーマルモードで、qaとして、aレジスタに記録(q)する。
するとステータスに記録中 @aと出るので、そのあと記録したい動作を入れていく。

今回はダブルクォートの中だったので、

  1. 「radio」を検索
  2. ci"でダブルクォートの中(i")を変更(c)
  3. escとかで閉じる
  4. 記録終了q

で、このあと記録したマクロを実行するには、@a(今回はaレジスタなのでa)をする。
回数も当然指定でき、回数@aでOK。
このqaでaレジスタにすると、qaって小指でひっかくだけで記録まで行き着くので楽。
ただ、やらかすこともあったので、qqだと連打で済んで楽かなと。

1. fとt

行内で文字を探して移動するもの。
これを使っての選択、編集がなかなか強かったので。

border-bottom-width: 12px;

カーソルが頭だとして。
bottomをtopに書き換えてみる。
fbct-top
順に行ってみる。
f: 行内の指定した1文字に飛ぶ
ex.)fe カーソルからみて、次に出る行内のeに飛ぶ
Fで前を探す。

t: 行内の指定した1文字の前に飛ぶ
fの1文字手前バージョン。
Tも前を探す。
cを組み合わせて変更とした。

あと、f,t共に、,でさらに前、;でさらに後
も探せる。
注意したいのが「行内のみ」というところ。

ついでに2文字で行を跨いで移動できるsneak.vimなんてのも紹介しておく。
わかりやすい参考
sneak.vimで高速カーソル移動 - ぺけみさお

インクリメント、デクリメント

インクリメント、デクリメントができます。
それぞれ<C-a><C-x>
vモードで選べば、その数字を増減できます。
当然増減量も指定でき、20追加なら20<C-a>といった具合。

ただ、最近のVimには新しく機能が追加されているようで
vim-jp.org
なんと縦並びの連番がめちゃくちゃ簡単に作成できる...。
実験してみよう。

  1. 1を大量に縦に並べる
  2. 2行目以下を全て選択(<C-v>とかつかう)
  3. g<C-a>と打つ

っ ょ ぃ

fish shellをいじくる(メモ)

最近hot(と信じたい)fish shellさんをいじります。
主にカラフルにして見やすくするところまでをやっていきます。
チラシ裏のメモ書き程度です。
あまり真に受けないでね。

プロンプト

Powerlineしたい
bobthefishを入れる

bobthefish

注:fisherで導入するとともに以下のファイルが上書きされるので、注意
それ以外もなんか増えてるので、公式で確認すること。
GitHub - oh-my-fish/theme-bobthefish: A Powerline-style, Git-aware fish theme optimized for awesome.

~/.config/fish/functions/fish_greeting.fish
~/.config/fish/functions/fish_mode_prompt.fish
~/.config/fish/functions/fish_prompt.fish
~/.config/fish/functions/fish_right_prompt.fish
~/.config/fish/functions/fish_title.fish

左側を調整

1回ごと改行すると見やすくなるので、
~/.config/fish/functions/fish_prompt.fish
内の function fish_prompt すぐ下に以下のように空のechoを追加してみる。

function fish_prompt -d "省略"
  echo ""

おそらく改行してくれているはず

右側も調整

localeを日本語にしてるので、右の時間表示がうるさい。

2019年02月22日 15時07分46秒

~/.config/fish/functions/fish_right_prompt.fishを弄る

function __bobthefish_timestamp
  # or set -l theme_date_format "+%c"
  or set -l theme_date_format "+[%T]"
end

こんな感じに変更してみた

[15:10:40]

やさしい解説

(超入門)fishでプロンプトを変えたい人へのチュートリアル - Qiita

Git メモ

基本、man git-addなどとして機能確認。

きれいなメモが見たい方はこちらの方参照
Gitコマンドメモ - Qiita

準備

SSH鍵を使って楽にセキュアに接続

GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita

初期化, 状態確認

追加 (add)

コミット (commit)

タイトル付きコミット

$ git commit -m "[ADD] コミットのメモ"

タイトルにはわかりやすいように、コミットの種類に応じてタグ付をしている。

  • ADD: ファイル、機能追加、追記など
  • FIX: BUGの修正
  • UPDATE: 今までの機能の改善や小追加
  • WIP: Work in Progress 途中です

差分 (diff, archive)

gitで差分ファイルを抽出する - Qiita

チェックアウト, ブランチ, マージ (checkout, branch, merge)

Git - ブランチとマージの基本
ブランチ切ってチェックアウト

$ git checkout -b ブランチ名
// ↑は以下の短縮
$ git branch ブランチ名
$ git checkout ブランチ名

今のブランチ確認は $ git branch
shellのプロンプトに表示する方が多いので、その線も検討。

merge手順

  1. masterブランチにcheckout
  2. 今までいたブランチ指定してmerge(今いるブランチにマージする)
  3. コンフリクトがあれば編集して調整

修正 (rebase)

rebase -i でコミットをまとめる - Qiita

諸注意

gitしてても弄るの不安

最初はクリティカルにやらかす(断定)ので、同時に初期バックアップ(zipで固める)も作ってとなりに置いとく。
なんならコミット忘れとかでいろいろやらかすのも防止するために、Cowseeとか使ってみるとか。

追々Gitに移行して行くかんじがいいか。

無駄な差分を出さない

GitのGUIクライアント(SourceTree, GihubDesktop, TortoiseGitなど)で弄る際、
OSをまたぐ際、
テキストエディタなどでの注意
無駄な差分を出さないVim - Qiita

VSCode 以下setting.jsonに追記でEOFやスペースの設定

"files.trimTrailingWhitespace": false,
"files.insertFinalNewline": false,
"files.trimFinalNewlines": true
  • 行末スペース削除: お好みで
  • EOF挿入: false
  • EOFの自動削除: 一応true。

弊社ではEOFを消すようお達しが出ているため削除している。
基本、開発しているものに合わせるべき

https://github.com/Microsoft/vscode/issues/12076

gitやFTPクライアントによって以上が書き換えられることもある。 改行コードやこれら設定を維持する為に、FTPクライアントは「バイナリモード」でUp/Download、
gitクライアントはautocrlfなどの設定関係を確認

キーワード:EOF, EOL, 改行コード