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

Vim環境でSvelte.jsのシンタックスハイライトをつける

$
0
0

はじめに

普段開発時に私が使用しているテキストエディタはVim(正確にはNeovim)なのですが、
Svelte.jsの.svelteファイルを開くと全てのコードが真っ白で開発しずらかったので、何かシンタックスハイライトをつけるいい方法がないか探した。

vim-svelte

一番手取り早いのはVimのプラグインを見つけることだったので、Svelteのプラグイン情報が載っているSvelte Communityで探すことに、、
正直ないだろうなーって思っていたのですが、探したらなんとvim-svelteというものがありました。早速インストールしました。

私のプラグイン管理はdein.tomlで行っていたので、以下のようにプラグインを追加してインストール

[[plugins]] # Svelte.js
repo = 'evanleck/vim-svelte'

再度Vimを開き直して、Sapperのtemplateを確認したところシンタックスハイライトがつきました!!

vim-svelte1.png

見やすい!!

if文にもしっかりついていていい感じです。
vim-svelte2.png

これでVimでも快適にSvelte.jsが使えそうです。

ちなみに初期状態だと<script>タグと<style>タグにインデント挿入されるようになっていますが、以下の設定を追加することで無効化することが可能みたいです。

let  g: svelte_indent_script  =  0 
let  g: svelte_indent_style  =  0

vimでJava言語用のポップアップ表示を設定する。

$
0
0

まずはじめに、、、私は派遣社員だ。
そのため、派遣先への面接時に、営業が同席する。
その営業が私の意見を無視して勝手に話を進めるため、あれよあれよでその派遣先が決まることがある。
派遣社員になった以上、人間を捨てているが、ちょっと勘弁して欲しい。

と言うことで、次はJava言語案件になるかもしれない。
と言うことは、Java言語を勉強し直す必要が出てきた。
しかし、Java言語関係の本は、使わないと思い、実家に置いたままだ。
仕方ないため、初学本から買い増しすることにした。
何冊何種類の初学本を買えば済むのか・・・できればKindle本を買うつもりなのだが、見にくいため、どうしても紙の本になる。
何か良い対策はないだろう。

※表題は"Java言語用"としているが、あまりJavaに関係ない。

本題

初学向けのプログラミングであれば、仰々しいIDEは絶対にいらない。
そんな環境構築をする暇があるならば、少しでも勉強する時間に充てたい。
如何せん。
Vimを使いこなせないため、未だにIDE並の構築が出来ていないままだった。
これを機に、Language Server Protocol(略:LSP)を導入しようと思う。

LSPとは。

入力途中を自動補完などで完結してくれる機能のことだと思う。
そう思って導入することを決めた。

難しいことはしたくない

IDE環境を用意するのはめんどくさいので、既にインストール済みのVimにちょこっと手を加えるだけで環境構築したいと思っている。
そのため、難しいことや時間が掛かることはしたくない。
と言うことで、上記mattn氏の導入コストを下げるプラグインを使うことにした。

実際のLSP導入

簡単にできるとのことなので、mattn氏の説明通りに進めることにした。

前提

プラグイン管理は、minpacを使っている。

プラグイン導入

1行で済むのか、2行必要なのか、、、とりあえず、簡単に導入できると思っていた。

vimrc
call minpac#add('prabirshrestha/vim-lsp')call minpac#add('mattn/vim-lsp-settings')

んで、exコマンドライン上で、

コマンド
call minpac#update()

を打ち込む。
そうすることで、プラグインが導入される。
これだけですごく便利になっている。

設定ファイルの書き換え

vimrcへの書き込みも必要だ。

vimrc
" ファイルの変更に伴いリアルタイムにエラー表示する機能 letg:lsp_diagnostics_enabled=1letg:lsp_diagnostics_echo_cursor=1" 自動で入力補完ポップアップを表示する設定letg:asyncomplete_auto_popup=1letg:asyncomplete_auto_completeopt=0" ポップアップを表示するまでのディレイletg:asyncomplete_popup_delay=200" LSP の仕様である textEdit を有効にする設定letg:lsp_text_edit_enabled=1letg:lsp_signs_enabled=1letg:lsp_diagnostics_echo_cursor=1

mattnさんは、設定ファイルを分割しているようだが、私はしていない。
そのため、vimrcに書き込んでいるのだが、問題ないと思っている。

母艦も大事

vim-lspが母艦になるようで、これを入れなければ、エラーになる。

エラー
Error detected while processing User Autocommands for"lsp_setup":
E117: Unknown function: lsp#register_server

vim-lsp_Err.jpg

エラーは避けたい

母艦のプラグインを導入せずに作業を進めたことで、エラーになってしまった。

エラー
BufRead Autocommands for"*.java"..FileType Autocommands for"java"..function<SNR>8_vim_lsp_load_or_suggest[105]..User Autocommands for"lsp_setup"の処理中にエラーが検出されました:
E117:未知の関数です: lsp#register_server

lsp-setup-filetype_Err.jpg

きちんと説明は読むようにしよう。

他にも

minpac-update_err.jpg

プラグイン管理用のプラグインにエラーが発生してしまったが、これは既に修正済みのようだ。

Javaファイルを開く

拡張子が*.javaになっているファイルを開く。
そして、

Exコマンド
LspInstallServer

installj-eclipse-jdt-ls.jpg

プログラミングファイルに応じたファイルがインストールされる仕組みになっているため、Yesを押下することで、インストール完了まで待てば良い。

java-installer-jdtls.jpg

完了した。

個人的に文字コードがおかしい・・・が、それは別の機会に見直そう。
UTF-8にしたはずだが・・・。

C++言語には未対応

よく分からないが、導入できないプログラミングファイルもあるようだ。

拡張子.cpp

C++言語ファイルを開く

cpp-ls-clangd.jpg

導入を進められるため、素直に従った。

install-clangd.jpg

当然Yesだ。

unxz-command-not-found.jpg

しかし、インストールに失敗した。
これは、必要なコマンドが見つからなかったかららしい。
そのため、私の環境に問題があるのかもしれないが、今はJava環境さえ整えれば良いため、先送り。

実際の恩恵にあずかれず。

おかしい。
自動補完が一切動かない。

Popupが全く表示されない。

おかしい。

mattnさんの設定には、

vimrc
if empty(globpath(&rtp,'autoload/lsp.vim')) ・
 ・
 ・

function!s:on_lsp_buffer_enabled() abort
 ・
 ・
 ・

augroup lsp_install
 ・
 ・
 ・

が書いてあったが、これいるの?
これを記述することで、設定ファイルが崩されてしまったのだが・・・。

解決(ポップアップ表示)

別途プラグインが必要だった。

asyncomplete.vim

説明が英語なので、必要なプラグインとは思わなかった。

vimrc
"   オートコンプリートポップアップメニュー表示call minpac#add('prabirshrestha/asyncomplete.vim')"   オートコンプリートソースcall minpac#add('prabirshrestha/asyncomplete-lsp.vim')

この2種類が必要なようだ。

asyncomplete.jpg

意図していないポップアップ表示がなされ、ちょっと不快だ。
今回の例で言えば、"System"を入力したいのだが、 Sを入力した時点で、"Saf〜ナンチャラ"が自動入力される。
無茶苦茶不便。
やりたいことは、"S"入力時点で、何も入力されず、候補をポップアップ表示して欲しい。
困る。

asyncomplete.vim

表示方法は、nvimの方がよさげに見えるが・・・。
今更本体を乗り換えることはしない。

一応完成

上記の不満はあるが、一応は設定したと言うことにする。
まだまだJava言語の勉強をvim本体だけで完結するにはほど遠いが、今回の記事はこれで終わる。
ゆくゆくは、実行やデバッグなども出来るようにしたい。
※このポップアップ表示の設定をするためだけに今日1日潰してしまった。
あぁIDEが恋しい。

以上。

VimでもLive Serverが使いたい!!

$
0
0

前置き

こんにちはこんばんは、はすです。私は最近完璧にメインエディタがvimになってきているわけなんですが、ふと
Live Server的なプラグインvimにもあるのだろうか?
と思い立ち、調べたところありました!
それがbracey.vimというプラグインです。

bracey.vimとはなんぞや?

公式のリポジトリには以下のように書いてありました。

live edit html, css, and javascript in vim
vimでhtml、css、およびjavascriptをライブ編集します

要するにvimでHTMLなどを編集すると自動的にwebページに変更を反映してくれるめちゃ便利なプラグインです。

導入方法

基本的にはこちらに書いてあるので参考にしてください。
ですが、一つ注意点があり、README.mdにはLinuxでの設定方法しか書いていません。MacOSで使う場合は.vimrcに

let g:bracey_browser_command = open

と記述する必要があります。
※Windowsではこういったコマンドが見つかりませんでした。WSLなどを使ってください。もしコマンドを知っている方がいたら教えて下さい

余談

このプラグインはとても便利なプラグインなのでvimmerの方はぜひ使ってみてください。あとこのプラグインREADME.mdにhow it worksということでどうやって動いているかが記載されています。簡単にまとめると
pythonを立ち上げ

pythonがnode.jsサーバーと通信してvim上のすべてのアクション(カーソル移動や、テキスト変更など)をnode.jsのサーバーに送信
という流れみたいです。気になる方はぜひ読んでみてください。

vim-goimportsが効かない時の対処法。

$
0
0

 はじめに

Vimに vim-goimportsを追加してみたものの効かなかったので対処法を記しておきます。

対処法

なぜ効かなかったかといいますと、~/.zshrc に$GOBINを通していなかったからです。
ということで、~/.zshrcに以下を書くだけです。

.zshrc
export GOBIN="$GOPATH/bin"

vscodeのneovim extentionが動かなくなったので、しょうがなくMacにHomebrew経由でneovim 0.5 をinstallするぜ

$
0
0

これはなにか

vscodeでnvimのextentionを使っているのですが、動かなくなりました。
neovim の 0.5 が必要らしいです。
brew で普通にinstall && upgrade すると、0.4系しかinstallできませんでした。

解決方法

brew unlink neovim # すでにneovimをmacでinstallしている人はunlinkする必要がある
brew install--HEAD neovim

エラーハンドリング

cmake をreinstallしろよエラー

error log

==> Checking out branch master
Already on 'master'
Your branch is up to date with 'origin/master'.
HEAD is now at a90cd6e Merge #12868 vim-patch:8.2.{1625,1630,1633}
Error: An exception occurred within a child process:
  RuntimeError: /usr/local/opt/cmake not present or broken
Please reinstall cmake. Sorry :(

solution

brew install cmake

luarocks をreinstallしろよエラー

==> Checking out branch master
Already on 'master'
Your branch is up to date with 'origin/master'.
HEAD is now at a90cd6e Merge #12868 vim-patch:8.2.{1625,1630,1633}
Error: An exception occurred within a child process:
  RuntimeError: /usr/local/opt/luarocks not present or broken
Please reinstall luarocks. Sorry :(

solution

brew install luarocks

まとめ

neovim, nolife!

ちょっと自分のメモ書き

$
0
0

AWS

基本的にLinuxコマンド

sudo vim とは

super user do
つまり管理者権限を持った人間がやりますよ
という意味のLinuxコマンド

vimはvimEditor
使い方はLinuxとはまた別

環境変数

.zshrc 内に記述してconfig/secrets.ymlで呼び出す。
それによって公開を防ぐ。
※ただしrailsの5.2以降はcredentials.ymlを使用する。

credentials.ymlとは

まだよくわからん

rails でキャッシュのクリア

ブラウザでクリア
spring stopでクリア
webpackerでクリア
railsの再起動でクリア
vs-codeの再起動でクリア

※webpackerがよくわからん

Vim メモランダム

$
0
0

ドットインストールの学習メモです


vimのモード

ノーマルモード

ここからいくつかのモードに入れる

入力モード

ノーマルモードで i を入力。 insert
escでノーマルモード

コマンドモード

: を入力。 command
escで戻る。

ヴィジュアルモード

v を入力。 visual
選択するモード。
escで戻る。

ファイルの保存、読み込み

  • :q
  • :w
  • :q!
  • :e 他のファイル

移動をマスター

ノーマルモードで使える
- gg 先頭にいく
- G 最後にいく
- ctrl + f 一画面下
- ctrl + B 一画面上
- w 単語単位で進む
- b 単語単位で戻る
- ^ 行頭にいく
- $ 行末にいく
- f + 行きたいキャラクタ (f + u == uniqまでなど ;で次の候補)
- {の上で%を押すと対応捨}まで飛んでいってくれる。

ヴィジュアルモード

vキー

文字単位で選択できる。

Vキー shift + v

行単位で選択できる。

ctrl + v

矩形選択。

gg + ctrl+v + shift+g

全選択となる。

カット、コピー、ペースト

カット

ノーマルモード

x

一文字単位

dd

行単位

3dd

3行まとめて

ペースト

p

コピー

yy
3yyなども可

検索

ノーマルモードで/

/ 文字

下方向に検索したいときは n
上方向に検索したいときは N

* , # 今カーソルがある単語を検索

* 下に検索
# 上に検索

置換

ノーマルモードからコマンドモードへ :

: s/state/State など substitute

: s/state/State/g 行内の該当全て

: %s/state/State/g ファイル全体で置換

: %s/state/State/gc いちいち確認を求める confirm

捜査の取り消し undo, redo

  • undo u
  • redo ctrl + r

ウィンドウの分割

ノーマルからコマンドモードへ。:

:sp splitの意 上下に分割

ctrl+w の後に wで下のウィンドウにいく。
:e 他のファイル で他のフィアルを開ける。

:vs virtical split 左右の分割

いらなくなったウィンドウは :close で閉じる

タブを使ってみよう

:tabnew で新しいタブを作れる

:tabe ファイル名 ファイルを指定してタブを開ける

ノーマルモードで gc でタブの切り替え go to next tab?

:tab close でタブを閉じる

vim -p ファイル1 ファイル2 でタブを開いた状態で始める

:tabdo 開いてる全てのタブで置換したい場合

;tabdo %s/html/HTML/g など

直前の操作を繰り返す

3dd

ノーマルモードで.ピリオド

同じ操作を繰り返す

インデントを揃える =

全体を揃えたい  gg + shift+v + shift+g の状態で = 。

補完機能 ctrl + n

スクリーンショット 2020-09-01 9.11.34.png

矩形選択後に編集 複数行の頭に何か入れたい場合など

  • ノーマルモード ctrl + vで矩形選択
  • shift + i で挿入モードに入る
  • 入れたいものを入れて esc出戻ると反映されている。
  • ctrl + vの後に xをすれはまとめて消せる。

テキストオブジェクト titleタグに囲われたテキストなど・・・

ノーマルモード + cit   タグの中身を削除して挿入モード

  • c change:delete and insert. c/d/yから一文字めを選ぶ。
  • i i:inner or a:all
  • t t:tag or " or { or .... タグか""か{}かを選べる。

cat: タグ全体を削除して、挿入モード
ci" "utf-8"などを ""として中身の挿入モード

便利な設定

:set number 行番号の表示

:set nonumber で消える

:syntax on 色分けの表示

:set syntax off で消える

:set tabstop タブの文字数を規定

:set ignorecase 検索の大文字小文字を区別しない

:set noignorecaseで消す。

CentOS7: Vim -> githubからのアップグレード

$
0
0

vimのバージョン7がインストールされているときの備忘録。
-> バージョン8へアップグレード

必要なパッケージのインストール

$ sudo yum update -y
$ sudo yum install -y git ncurses-devel

標準パッケージのアンインストール

#インストールされているパッケージを調べる。$ sudo rpm -qa | grep vim
vim-filesystem-7.4.629-6.el7.x86_64
vim-common-7.4.629-6.el7.x86_64
vim-enhanced-7.4.629-6.el7.x86_64
vim-minimal-7.4.629-6.el7.x86_64
#パッケージのアンインストール$ sudo yum remove vim-filesystem vim-common vim-enhanced

githubからのダウンロード

$ git clone https://github.com/vim/vim.git

ビルド

$ cd ./vim
$ make
$ sudo make install

確認

$ vim --version

~/.zshenvを読み込まないmac版アプリ(vim screen)の問題

$
0
0

Mac版 path_helper 問題を解決するシェルスクリプト(path_helper問題2) - Qiita
https://qiita.com/shiro_yone/items/973f6a9ad01d913f502c

筆者が記述した /etc/zshenv 用のシェルスクリプト記述は10.11でも動作している。

行ったこと

MacOS 10.9環境で、screen-v.4.8.0 tmux 3.1bをインストールと起動後のPATH確認を行った。

別件の問題

MacOS 10.9別件の問題でvimやscreenからターミナルを起動させると
/etc/zshenv のPATHしか返ってこない問題がある。
「/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin」
期待値
「/usr/local/stow/ruby/bin:/usr/local/stow/gettext-021/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/xxxxxxx/bin」

この問題は、linuxのbashやzsh上のvimで起きない。
MacOS 10.11で今の所起きない。確認したのは vim screen tmuxだけだが。
10.11 + vim screen tmuxならば、ホームディレクトリの ~/.zshenv を読み込む。

MacOS 10.9で tmux 3.1b を起動して echo $PATH すると期待値が返ってきた。

結論

つまり
(1)~/.zshenv を読むか読まないかは、アプリのコード仕様である。
(2)(path_helperは問題だが)MacOSXのシステム故障では無いかもしれない。
(3)tmuxはホームディレクトリの ~/.zshenv を読み込む。

zshの設定ファイルの読み込み順序と使い方Tipsまとめ - Qiita
https://qiita.com/muran001/items/7b104d33f5ea3f75353f

tmuxだけでなく、vim screen はホームディレクトリの ~/.zshenv を読み込むはずだが
ウイルスやシステム破壊を疑ったほうが良いのだろうか?

課題

筆者に出来そうなのは
春ごろにインストールした、vim8.2-1471 の再インストールぐらい?

記事作成は8月だが vim8.2-14xx系 をインストールしたのは春頃。
vim (8.0以降)のインストールとconfigureまとめ - Qiita
https://qiita.com/shiro_yone/items/71896e7fa38e0dffa7d6

筆者はこれくらいしか出来ない。原因究明もこれ以上出来そうにない。
ソースコードを当たれないし質問するにしても「mac PATH vim ログインシェル」で検索しても大量に出てきてgoogleなどの検索も役に立たない。

ホント、何がいけないのだろう?

過去に行ったこと

(a)7月頃に homebrew が問題となり iterm2 を落としている。homebrewかopensslどちらかが問題だったかも?
その後、
(b)homebrew 削除
(c)imagemagick や ruby、kindai.rbをインストール。
(d)vimからインストールしたruby が起動出来ない。(ホームディレクトリの ~/.zshenv を読み込まない問題)
(e)path_helper問題に気付く

end

coc.nvimのプラグインをvimrc(init.vim)からインストールする設定

$
0
0

以下のように書けばいい

" vimであれば、.vimrc" neovimであればinit.vim" これは自分の使っているプラグインletg:coc_global_extensions=[      \'coc-yank'      \,'coc-tsserver'      \,'coc-snippets'      \,'coc-prettier'      \,'coc-pairs'      \,'coc-fzf-preview'      \,'coc-explorer'      \,'coc-rust-analyzer'      \,]

Wikiにも書かれているけど、見つけ辛い
https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions

asdf プラグインの作成 : Vimの場合

$
0
0

asdf-vm プラグインの作成

asdf-vmはバージョニング管理ツール(でいいのかな?)で、プラグインによる複数種のツールの管理、また同機構での拡張ができるのが特徴です。

asdf-vim プラグイン

さて、このプラグインの一覧を見たときに、Vimがないことに気付きました。

Vimはパッチバージョンの更新が頻繁で、リリースという明確な区切りがないので、ときどき不具合ありに当ってしまうことがあります。

このときに回避したり、どこで混入したか調べたりするのに、古いバージョンを簡単に導入・切り替えできると嬉しいところがあります。

(とはいえ、作った者は、普段はLinuxbrewで更新していってるので、これであれこれすることは少なそうですが...)

そこで、練習と環境充実を兼ねてasdf-vimを作成しました。

asdfのプラグインとして

下で作成自体については詳細に説明しますが、asdfのプラグインがどんなことをすればいいのか、簡単に説明します。

  • bin/install、bin/list-all というコマンド(基本シェルスクリプトだが)が入ったリポジトリを作る(これは最低限)
  • bin/list-all はどうにかやって、対象ツールのインストールとちえ対応するバージョンリストを出力する
  • bin/installは引数で上のバージョン、インストール先などの情報をもらうので、それをもってインストール処理を行う
  • asdf plugin-install hoge <git htttps path>でプラグインをインストールして使う
  • asdf-pluginsへPRするには、

    • CIテストの追加、GitHub Acitonsならインストールテストをしてくれるactionが用意されている
    • CIテストがGreenであること
    • pluginsディレクトリのhogeファイルにターゲットリポジトリを記載
    • READMEに名前、リンク、Statusなどを入れ、更新
    • これをローカルチェック
    • PRのステータスもGreenであること

    を確認しこれらをもってPRとして追加依頼をする
    Adds vim plugin by tsuyoshicho · Pull Request #289 · asdf-vm/asdf-plugins

オフィシャルへの追加がありうるようなプラグインとしてはかなり簡素ですね。

よくあるOSS派生物作成として

作り方というか、わりとへろっと作ったので、その軌跡は残しておこうかと思います。
今回のもの固有というよりは、なんらかのOSSの派生(forkというよりは類似品作成的なもの)として参考になるように凡例的に書いている(つもり)。

  1. 既存のプラグインのコードを眺めてみる
  2. オフィシャルドキュメント docs at asdf-vm.comを読む
  3. ある程度目処がついたら、自分が作りたい内容に近いものを探す (今回はsrivathsanmurali/asdf-cmakeを派生元にさせてもらった)
  4. ライセンスをチェックし、派生できるか確認
  5. 大丈夫なので派生する
  6. 自分向けに必要箇所を変更(cmake->vim)
  7. ビルドするところは完全に新規で作る...が、これも実績あるものを参考にする (継続的にビルドをやってるものとして homebrew-core/vim.rb at master · Homebrew/homebrew-coreを参考にした)
  8. これらをもとに自分が思うところも修正する (travis -> GitHub Action化、同処理でshell scriptのlint)
  9. 動作確認
  10. 完成

こんな感じで既存の動いてるものを参考にすることで、初動の良さ、あまり必要のない詰りをうまくやれたりします。

いかがでしたか?

って書くとアレですね...、他のソフトのプラグインでもですが、1本まるまるソフトを作るにくらべると敷居は下るので、挑戦するに良い題材なのではないでしょうか?

Ubuntu: Vimの最新バージョンインストール

$
0
0
add-apt-repositoryのインストール
$ sudo apt-get install software-properties-common
$ sudo apt-get update
リポジトリからインストール
"リポジトリの追加
$ sudo add-apt-repository ppa:jonathonf/vim
$ sudo apt update"インストール
$ sudo apt install vim"バージョン確認
$ vim--version

プラグイン管理のdein.vimもインストールしておきましょう!
https://github.com/Shougo/dein.vim

Vim: NERDTree plugin

$
0
0
.vimrc
"dein.vim設定 -> プラグイン追加+call dein#add('preservim/nerdtree')"nerdtreeのキーバインド+ nnoremap <silent><C-e>:NERDTreeToggle<CR>"隠しファイルの表示+let NERDTreeShowHidden=1
基本的な使い方
"上のキーバインドが前提です。"ツリー表示 -> ツリー隠す(トグル)c-w"ツリーと編集画面の移動c-wwツリーのファイル上で ->o(enter)->ファイルオープン
"-> 新しいタブは開かない -> 編集中ならスプリット表示されるツリーのファイル上で ->t->新しいタブでファイルオープン

詳細な使い方はこちら!
vim-plugin NERDTree で開発効率をアップする!

LTGMお願いします!
モチベーションが上がります!

[vim] タイムスタンプの入ったファイル名でメモを開くだけのvim plugin

$
0
0

続・初めてのvimプラグイン作成 - 最小限なvimプラグインを参考にしつつ、以下の機能のプラグインを作ってみましたので、その記録です。

自分は以下のような方法でメモを取っています。

  1. メモはいつも同じフォルダの下につくる。(後で検索するのが楽なので)
  2. メモはメモを取った日付 YYMMDD を頭につけて、その後ファイル名で用途を示します。
  3. メモ本体は Markdown で書いて、読むときは Chrome / Firefox の Markdown プラグインで読むか、Markdown Viewer を使う。

この用途を満たすプラグインを作ります。その際、以下の実装仕様を取り込みます。

  1. メモのファイル名にタイムスタンプ(YYYYMMDDHHMMSS形式)を入れる
  2. 保存フォルダはグローバル変数に設定する。なければ ~/Documents/Memoに保存する。

要するにvimのコマンドラインモードで :Memo ほげほげのように打つと、20200901120105_ほげほげ.mdのような名前のファイルを開いて、メモができるようにします。

実装環境

> vim.exe" --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Dec 12 2019 13:19:27)
MS-Windows 32 ビット コンソール 版

ただし、バージョン依存が強いものは使っていないので、autoload が動く vim なら大体動くはずです。

成果物

https://github.com/aikige/memo.vimにアップロードしてありますので、よろしければどうぞ。

実装上のポイント

基本方針

  • 本体は autoloadplugin二分割する。
    • スクリプトの大半は autoload/memo.vimに置くことで、起動のオーバーヘッドを減らす。
    • plugin/memo.vim側はコマンドの呼び出し設定のみ書く。
  • vim-plugで管理できるようなフォルダ構成にする。

使い方

準備(インストール)

vim-plugを使っているのであれば、以下のような感じにして...

call plug#begin('~/.vim/plugged')
Plug 'aikige/memo.vim'
call plug#end()

vim をコマンドラインモードにして、 :PlugInstallコマンドを呼び出してインストールしてください。

プラグインマネージャを使っていないのであれば、github からExportしたZIPファイルをお使いの ~/.vim/以下、ないし %USERPROFILE%\vimfilesなどに展開すれば動きます。

メモのとり方

vimのコマンドラインモードで :Memo testのような感じでコマンドを打つと、 ~/Documents/Memo/202009010702_test.mdのような感じの名前のファイルを開きます(それだけ)。

vimがreplaceモードで起動してしまったら

$
0
0

.vimrcに以下を追加しておくと回避できる。

set t_u7= 
set t_RV=

vimtutor やった時のメモ

$
0
0

vim を使えるようになりたくて調べたらとりあえず vimtutor から始めるみたいな感じだったのでやってみた備忘録です。

追記:vimtutor ja と打つと日本語で vimtutor が使えました。。。英語できないのでそれに気付かずめっちゃ時間かかりました。

Lesson 1

Lesson 1.1: MOVING THE CURSOR

コマンド内容
hLeft
jUp
 kDown
lRight

Lesson 1.2: EXITING VIM

コマンド内容
esc通常モードになる
q!編集モードの編集内容を全て破棄

Lesson 1.3: TEXT EDITING - DELETION

コマンド内容
xカーソルが乗っている文字を削除

Lesson 1.4: TEXT EDITING - INSERTION

コマンド内容
iテキスト挿入モードになる

Lesson 1.5: TEXT EDITING - APPENDING

コマンド内容
A行末に移動しテキスト挿入
aカーソルの次の文字にテキスト挿入

Lesson 1.6: EDITING A FILE

コマンド内容
:wq編集ファイル保存

Lesson 2

Lesson 2.1: DELETION COMMANDS

コマンド内容
dw1単語削除

Lesson 2.2: MORE DELETION COMMANDS

コマンド内容
d$行末まで削除

Lesson 2.3: ON OPERATORS AND MOTIONS

コマンド内容
dw1単語削除
de1単語削除 (dwとは挙動が少し違う)
d$行末まで削除

Lesson 2.4: USING A COUNT FOR A MOTION

コマンド内容
2w2単語先の最初の文字まで移動
3e3単語先(現在のカーソル位置の単語を含める)の最後の文字まで移動
0行の頭まで移動

Lesson 2.5: USING A COUNT TO DELETE MORE

コマンド内容
d2wdwの2単語バージョン
d3edeの3単語バージョン

Lesson 2.6: OPERATING ON LINES

コマンド内容
dd1行削除
2dd2行削除

Lesson 2.7: THE UNDO COMMAND

コマンド内容
u直前のコマンド取り消し
U行の変更全修正

Lesson 3

Lesson 3.1: THE PUT COMMAND

コマンド内容
p直前にデリートしたものを出力

Lesson 3.2: THE REPLACE COMMAND

コマンド内容
rxカーソル上の文字をxに置き換える

Lesson 3.3: THE CHANGE OPERATOR

コマンド内容
cerx の単語版

Lesson 3.4: MORE CHANGES USING c

e の代わりに w,$,数字なども使える。
cw, c$ など。

Lesson 4

Lesson 4.1: CURSOR LOCATION AND FILE STATUS

コマンド内容
CTRL-Gファイルにおける自分の現在地確認
Gファイルの先頭に移動
ggファイルの最後に移動

Lesson 4.2: THE SEARCH COMMAND

コマンド内容
//以降に入れたワードを検索
n/で検索した操作を繰り返す

Lesson 4.3: MATCHING PARENTHESES SEARCH

コマンド内容
%(,{,[ にカーソルを合わせて % を押すとのペアの片割れに移動する

Lesson 4.4: THE SUBSTITUTE COMMAND

コマンド内容
:s/old/new/g"old"が""new"に置換される

Lesson 5

Lesson 5.1: HOW TO EXECUTE AN EXTERNAL COMMAND

コマンド内容
:!lslsコマンド実行
:!echo Hello World"Hello World" 出力

Lesson 5.2: MORE ON WRITING FILES

コマンド内容
:!w sample.txtsample.txtファイル作成
:!rm sample.txtsample.txtファイル削除

Lesson 5.3: SELECTING TEXT TO WRITE

コマンド内容
(vキーでビジュアルモードにし、テキスト選択した上で):!w sample.txt選択範囲をコピーしたsample.txtファイル作成

Lesson 5.4: RETRIEVING AND MERGING FILES

コマンド内容
:!r sample.txtsample.txtファイルの内容出力

Lesson 6.1: THE OPEN COMMAND

コマンド内容
oカーソルがある行の一個下の行に移動し、挿入モードになる
Oカーソルがある行の一個上の行に移動し、挿入モードになる

Lesson 6.2: THE APPEND COMMAND

コマンド内容
oカーソル位置の直後から挿入モードになる

Lesson 6.3: ANOTHER WAY TO REPLACE

コマンド内容
R単語置換

Lesson 6.4: COPY AND PASTE TEXT

コマンド内容
(vキーでビジュアルモードにし、テキスト選択した上で)y選択範囲のコピー
pペースト

Lesson 7

Lesson 7.1: GETTING HELP

コマンド内容
:helpヘルプ開く

Lesson 7.2: CREATE A STARTUP SCRIPT

.vimrc が設定ファイルだから自由にカスタマイズという説明。

Lesson 7.3: COMPLETION

コマンド内容
:e CTRL-Deから始まるコマンド一覧表示

vimを終了させる方法

$
0
0

初めてvim/viを学んだ際に抜け方が分からずに混乱したため、当時の自分に向けてメモを残します。
同じ状況の方の参考になれば幸いです。

①エスケープキー(esc)を押す

②状況に合わせて下記を入力

1.変更した内容を保存して抜ける
:wq
2.変更した内容を保存しないで抜ける
:q!
3.内容を何も変更してない時にそのまま抜ける
:q

上記②まで行えば正しくvimから抜け出せています。

【Python】自分の好きなデスクトップ画像を元に、自動で良い感じに合うターミナル/Vim/VSCodeのテーマを1コマンドで作ろう

$
0
0

例えばこんな感じ

91911058-435f2500-eceb-11ea-98c3-45ee1aab066a-min.png

92177661-e34bb880-ee7b-11ea-83bc-63149f6051bb-min.png

ss2.gif

好きなデスクトップ画像さえあれば、1コマンドですぐに反映できます。

これらは実際に私のデスクトップ画像を元に、自動であうテーマを1コマンドで生成/反映したテーマです。

(私の他のテーマはこちらに10種類ほど置いています。 https://github.com/ryuta69/dotfiles)

やり方

1: Python3をインストール

Macであれば標準でPythonがインストールされていますが、そうでない場合はこちらからPython3をインストールしてください。
https://www.python.org/downloads/

2: imagemagickをインストール

## MacOS
brew install imagemagick
## Windows
https://imagemagick.org/script/download.php#windows からダウンロード
## Linux系
https://imagemagick.org/script/download.php#unix からダウンロード

3: Pywalをインストール

git clone https://github.com/dylanaraps/pywal
cd pywal
pip3 install.

4: Pywalを実行してみる

まず、実行したあと反映されたかどうかがわかりやすいように、ターミナルやvimを開いた状態にしておくことをオススメします。準備ができたら、下記のコマンドを実行してみてください。

wal -i xxxxx(デスクトップ画像)

実行した瞬間、 下のgifのように、ターミナルもvimもテーマが反映されましたでしょうか?

ss2.gif

5: Pywalは既存設定を上書きしないようにできてるので(安心)、ターミナル起動時に常時読み込むようにする

Pywalは既存のiTermの設定やvimのテーマが上書きしているわけではなく、~/.cache/wal配下にキャッシュが保存されてここからカラーセットを読み込むようになっています(だから安全)。

なので、反映させたあとにiTermを終了して再起動すると、もともとのテーマに戻っていることがわかります。

この状態からもう一度pywalで生成したテーマを読み込むには下記のコマンドを実行します。

wal -R

このコマンドを、.bashrcや.zshrcに追記しておくとターミナルが起動するたびに自動でテーマを読み込んでくれます。

VimやVSCodeにも、Pywalで作成したテーマを自動で反映させる

Vimはwal.vimをインストールする

下記の文を、.vimrcに追記してください

.vimrc
"" vim-plugを使っている場合
Plug 'dylanaraps/wal.vim'"" deinを使っている場合call dein#add('dylanaraps/wal.vim')"" neobundleを使っている場合
NeoBundle 'dylanaraps/wal.vim'set notermguicolors
colorschemewal

これ以外に設定はいりません。これだけで自動反映されます。

VSCodeはWal Themeをインストールする

こちらからインストールしてください。これだけで自動反映されます。
https://marketplace.visualstudio.com/items?itemName=dlasagno.wal-theme

発展1:fzfを介して、いつでも1コマンドでテーマを切り替える

fzfについてはこちらの記事が詳しいです。
おい、peco もいいけど fzf 使えよ

# ~/.theme配下に、自作のテーマフォルダが何個もある想定# 例:https://github.com/ryuta69/dotfiles/tree/master/dotfiles/.themesalias swtm='wal -i `ls -d ~/.theme/* | fzf`'

swtmと打てば、テーマ一覧を選択する状態となり、選択すればそのテーマに即時変更してくれます。(previewにranger入れるのもアリ。imgcatは動かない。)

発展2:themerを介して、SlackやChromeやFirefox用テーマを作る

themerについてはこちらの記事が詳しいです。
VSCode、Vim、iTerm、Slackなどのカラーテーマが簡単に作れるWebサイト 「themer.dev」

themerはそのままの状態では対応色が少ない為(Accent9がcursorとtextで被っちゃうなど)、vimやvscodeなどはpywalの方がオススメです。しかし、対応アプリの幅が非常に広いため「pywalで色生成→themerで魔合成」するコンボで様々なアプリにカラーセットを反映できます。

その方法ですが、~/.cache/wal/colorsからカラーセット16色を確認して、https://themer.dev/ にアクセスして、ポチポチ色を入れていく・・・といった手段が必要になりこれは非常に面倒です。ということで簡素なpywal→themerの変換PRを作成しました。

まだマージされてませんが、このブランチのpywalを用いればcolors-themer.jsというCUI版themer用設定ファイルが生成されます。これを用いて

npm install-g themer @themer/slack @themer/chrome @themer/firefox-addon @themer/vim @themer/vscode

themer -c colors-themer.js \-t @themer/slack \-t @themer/chrome \-t @themer/firefox-addon \-t @themer/vim -t @themer/vscode

とすれば各テーマファイルが生成されます。

まとめ(一番書きたかったこと)

余談ですが、こういった「活かした開発環境の見た目を作る」カテゴリを海外では「UnixPorn / VimPorn」と呼んでいます。

ちょっとだけこちらの、色々な人が自分のUnixPornを投稿してる、Redditのサイトを見てみてください。
https://www.reddit.com/r/unixporn/

ss.png

・・・・・最高じゃないですか!?いやもう本当大好きすぎて(ry

あとこのPinterestも見てみてください。
https://www.pinterest.jp/pin/333196072430758602/

ss 1.png

いや本っっっっ当最高じゃないですか!!??
・・・・って感じで自分は完全にハマってしまいまして、「自分も作りたいなぁ」と今年は色々自作テーマを試行錯誤して作ってました。でもやはりデザインセンスがなくってどれも全然ハマらなかったんですね・・・そんなときにこのpywalに出会いました。pywalのおかげでベースとなる配色をすぐに作ることができて、発見がたくさんあったりデザインの参考を作ることができました。

そしてついに、
冒頭にあげた画像の1枚目は憧れだったUnixPornのHot1位を
https://www.reddit.com/r/unixporn/comments/irl7i5/rectangle_ubersicht_orange_sunset_theme/

冒頭にあげた画像の2枚目はVimPornのHot1位を獲得することができました。
https://www.reddit.com/r/vimporn/comments/imlyg6/cowboy_bebop_brown_original_theme/

日本でもUnixPorn流行れ!お願いします!めっちゃ他の人のも見たい!めっちゃ開発環境いい感じにしたい!」という、強い強い思いを込めて記事を締めたいと思います。

(なにか質問あればコメントにてお願いします。Requirementsはこちらの公式ドキュメントを参照してください。)

Vimで選択した行の順番を入れ替える

$
0
0

バージョン情報

:versionの一部

VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jan 26 2020 11:30:30)
macOS version
Included patches: 1-148
Huge version without GUI.

よく紹介されている手法

tac / tail

tactail -rなどの外部コマンドを !を使って呼び出し、置き換える。

:h v_!

tacコマンドや tail-rオプションは環境によって利用できないことがあり、複数の環境を行き来する場合に採用しづらい

:g/^/m0

こちらは外部コマンドに頼らず、Vim の機能のみを使う。g:globalコマンドの、m:moveコマンドの略

:globalコマンドは :[range]global/{pattern}/[command]のように使い、[range]で指定された範囲の行のうち、{pattern}で指定された検索パターンにマッチする行に対して、順番に [command]で指定された Ex コマンドを呼び出す。

:h :global

:moveコマンドは [range]:move {address}のように使い、[range]で指定された範囲の行を {address}で指定された位置に移動させる。

:h :move

:g/^/m0のように組み合わせると、「すべての行を1行ずつ 0行目(1行目の上)に動かす」という動きをする。これは確かに行の入れ替えになっている。

なお、:g/^/m0は全ての行を入れ替えるが、:N,Mg/^/mN-1とすることで N行目から M行目を処理範囲とするよう拡張できる。手でこれを入力するわけにはいかないので、次のようなコマンドを用意する。

command!-bar -range=%
    \ Reverse
    \<line1>,<line2>g/^/m<line1>-1

これは望みの動作をするが、実際に実行してみると全行がハイライトされてしまう。次節で詳細を述べる。

:g/^/m0の問題点

:globalコマンドは各行に対してマッチングを行う際、現在の検索パターンを上書きしてしまう。^は行の先頭にマッチするため、結果として全ての行がハイライトされてしまう。'hlsearch'オプションを無効にしている場合その限りではないが、その場合でも直前の検索パターンが失われてしまうと nコマンドなどの際に不便である。

:h @/

解決策

前述した :Reverseコマンドの定義を少し変えて、次のようにする:

function!s:reverse_lines(from,to) abort
    execute printf("%d,%dg/^/m%d",a:from,a:to,a:from-1)endfunction

command!-bar -range=%
    \ Reverse
    \call<SID>reverse_lines(<line1>,<line2>)

実行しているコマンドが変わったわけではないが、関数呼び出しを経由するようにした。これだけで前述の問題が解決する。

この理由は、ユーザー定義関数を実行する際は検索パターンが一度保存され、実行が終了したあと復元されるため。結果として検索パターンが ^で上書きされることがなくなる。

Vim のヘルプから該当箇所を引用する (強調は筆者による)。

:h autocmd-searchpat

Autocommands do not change the current search patterns. Vim saves the current
search patterns before executing autocommands then restores them after the
autocommands finish. This means that autocommands do not affect the strings
highlighted with the 'hlsearch' option.

これは autocommand の実行に関しての記述だが、これと同じことがユーザー定義関数の実行時にも適用される。このことは :nohlsearchのヘルプにある。同じく該当箇所を引用する (強調は筆者による)。

:h :nohlsearch

(略) This command doesn't work in an autocommand, because
the highlighting state is saved and restored when
executing autocommands |autocmd-searchpat|.
Same thing for when invoking a user function.

この仕様により、:g/^/m0の呼び出しをユーザー定義関数に切り出すことで上述の問題を解決できる。

コピペ用再掲

" License: Public Domainfunction!s:reverse_lines(from,to) abort
    execute printf("%d,%dg/^/m%d",a:from,a:to,a:from-1)endfunction

command!-bar -range=%
    \ Reverse
    \call<SID>reverse_lines(<line1>,<line2>)

[vim] Vimの文字コードの認識の仕組みと、文字化けを減らすための設定

$
0
0

Vimで文字化けを防ぐための設定に関する記事が結構見つかるのですが、 Help に記載されている文字認識のルールをきちんと解説していることが少ないようですので、基本に帰ってそのあたりから原則を書いてみます。

基本的な考え方

登場する設定値は以下になります。

役割
encodingVim が内部処理に利用する文字コード。ただし、文字コード判定に失敗した場合はファイルの文字コードの最後の選択肢として利用される場合がある。
fileencodingsVim が 既存ファイルの文字コード推定に使う文字コードのリスト。
fileencoidngローカル設定値は、文字コード推定の結果Vimが設定する。グローバル設定は 新規ファイルを作成する際の文字コードとして利用される。

判定ルールは以下の通り。

  1. 既存のファイルを開いた場合、以下の手順で fileencodingが選択されます:
    1. fileencodingsのリストを最初から順番に試し、エラーが発生しなかったものが fileencodingの値として設定されます。
    2. fileencodingsをすべてでエラーが発生した場合は fileencodingの値は空になります。この場合、ファイルの文字コードとしては encodingに設定されている値を利用します。
  2. 新しいファイルを開いた場合、 fileencodingsの値は無視され、fileencodingのグローバル設定の値が利用されます。

.vimrcに指定べきおすすめの設定

日本語をデフォルトの文字として使う方々におすすめの設定は以下の通り(確認した環境は Vim 8.2 MS-Windows 32 ビット版の公式配布バイナリです)

  1. encodingの値は、使っている環境により選択してください。
    • Windows 版の場合は、cp932がおすすめです。utf-8を利用すると文字送りが崩れる場合があります。
    • それ以外の環境では utf-8を利用すればよいでしょう。
  2. fileencodingの値を setglobalで設定しておきましょう。この値は利用者が新しくファイルを作る場合に使用するべき文字コードを設定してください。
  3. fileencodingsは、判定でエラーになりやすい順番で書くのがおすすめです。
    • どの値を利用するべきかの良い参考記事を上げておきます:

これらを反映し、私は以下のような設定にしています。

この設定値は後ほど公開します。

Help をきちんと読んでみましょう

このあたりの詳細の仕様については、 fileencodingに関するヘルプに書いてありますので、一度以下を見てみることをおすすめします。

:help fileencodings

げ、英語だ… と思った方は以下の翻訳が役に立つと思われます:

Viewing all 5720 articles
Browse latest View live


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