Tag: vim

Neovimでyyがpで貼り付けられない?コンテナ×tmux×mac環境でハマったクリップボード問題の解決法

概要 Neovimでコピー(yy)した内容を貼り付け(p)ようとしたところ、意図しないテキストが挿入されるという現象に遭遇しました。 本記事では、OSC52ベースのクリップボード連携を導入していた際にこの問題に出会い、どのように原因を特定し、どのように理想の挙動を取り戻したかを記録します。 🐞 課題:yy でコピーしたのに p で貼れない? Neovim上で yy で行をコピーし、その後 p で貼り付けようとしたところ、**貼り付けられたのは直前の yy ではなく、古い内容(またはシステムクリップボードの内容)**でした。 この問題は特に以下の構成で再現しました: macOS (WezTerm) tmux をホスト側とコンテナ内両方で利用 Neovimで OSC52 を使った vim.g.clipboard を定義 🔍 調査ログ 1. レジスタの状態を確認 Neovimで以下のコマンドを使って、各レジスタの状態を確認: :reg " :reg 0 :reg + yy 実行後、無名レジスタ(")には値が入っている p で貼り付けられる内容は + レジスタの中身だった 2. p のマッピングを確認 :verbose nmap p 結果は no mapping found → p はデフォルト挙動のはず。 3. vim.opt.clipboard の影響を再確認 設定では以下を定義していた: vim.opt.clipboard:append({ "unnamedplus" }) これは p を “+p に読み替える効果を持つ可能性があり、貼り付け元が無名レジスタではなく、+ レジスタになっていた。 Read more...

rafi-vim-config

vimというよりはneovimの話になる。 rafi/vim-config vim用のconfigのレポジトリ 個人というよりContributorsが多数いる非常に多機能なneovimの設定を目指したレポジトリ。 rafi/vim-config: Lean mean Neovim machine, carefully crafted with Use with latest Neovim. エラーメッセージが出ている状態だと非常にもっさりする 初回インストール時に大量のプラグインがインストールされる(好みが分かれそうなポイント) インストール ~/.config/nvim 配下になるようにgit cloneすれば良い。 私はghqを使っているので ghq get https://github.com/rafi/vim-config.git cd ~/.config/ ln -s ~/workspace/git/github.com/rafi/vim-config ./nvim コンテナ上での注意点 初回起動時、大量のプラグインのインストールが発生する。 またmacOS上のdocker環境のnvimでrafi/vim-configを使った場合、画面表示が非常に崩れた。それもあって動作がもっさりしている。 Linux上で検証した場合には発生しなかった。何かdocker環境上で使う場合、CUIの表示に難ありかもしれない。 超強力なmacOS(M2 32GBメモリ)上のコンテナより、ラズパイ4ベアメタルでの表示の方がスムーズだし、プラグインのインストールもスムーズに終了する。 設定用ディレクトリ 設定の追加は rafi/vim-config: Lean mean Neovim machine, carefully crafted with Use with latest Neovim. を参考にした。 オフィシャルのStructureのディレクトリ構成の説明が参考になる。 2023/12時点では下記の構成になる。 lua/config ユーザーの設定 lua/plugins ユーザーのプラグイン設定 snippets 個人的なsnippets config配下には更に下記のファイルを置ける。 Read more...

vim関連のあれこれ

開いているファイルの文字コードの確認 set fileencoding? デフォルトの文字コードをUTF8にする set encoding=utf-8 set fileencodings=utf-8 vim-refでriを検索する vim-refはRubyに限らずvimでリファレンスを参照するプラグイン、そこからRubyのリファレンス参照コマンドのriを使うプラグインが vim-ref-ri [[Uniteを使ってriを検索できるvim-ref-riというプラグインを作った|http://yuku-tech.hatenablog.com/entry/20120429/1335628327] 使い方は簡単。vim-refとして検索するなら :Ref ri NAME Uniteインタフェースでインクリメンタルに検索したいなら :Unite ref/ri と実行する vim-refで辞書を引く ※ 一通り、動作するように設定できてから気づいた… これは、tmuxで範囲を選択し、翻訳できた方が汎用性が広い… :Ref alc hello などとして、vim-refにalcが定義されていた時代もあったのだが、アルクから指摘があり、コードから削除した背景があったようだ 今のvim-refは webdictというソースに変更され、これを設定することで複数ソースに対応している(上記URLのすぐ次のエントリで対応している) 設定方法はvim-refの環境を整えるを参考にした "webdictサイトの設定 let g:ref_source_webdict_sites = { \ 'je': { \ 'url': 'http://dictionary.infoseek.ne.jp/jeword/%s', \ }, \ 'ej': { \ 'url': 'http://dictionary.infoseek.ne.jp/ejword/%s', \ }, \ 'wiki': { \ 'url': 'http://ja.wikipedia.org/wiki/%s', \ }, \ } "デフォルトサイト let g:ref_source_webdict_sites.default = 'ej' "出力に対するフィルタ。最初の数行を削除 function! g:ref_source_webdict_sites.je.filter(output) return join(split(a:output, "\n")[15 :], "\n") endfunction function! Read more...