1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCodeのクリップボードとの比較をNeovimで実装する

Posted at

はじめに

VSCodeからNeovimに移行して2週間ほど経ちました。設定も煮詰まってきて、VSCodeと比べてNeovimのここが使いにくいという箇所も大分減ってきました。
しかし、VSCodeでよく使っていたクリップボードの比較機能がNeovimに無いことが不満だったので、それを再現してみました。
Vim初心者なので、お手柔らかにお願いします。

クリップボードとの比較とは

VSCodeのコマンドパレットから使えるあの機能のことです。
正式なコマンド名はFile: Compare active file with clipboard.
日本語だと、クリップボードとアクティブファイルの比較。
image.png

このような感じで、新しいファイルを作らずともファイルの比較ができます。また、差分も強調表示されます。

できたもの

image.png
スペース(リーダーキー) b cでこの画面が表示されます。

設定方法

以下のコードをお好きなところに貼ってください。
私はLazyvimを使っているので、nvim/lua/config/keymaps.luaに書きました。

local function compare_to_clipboard()
  local ftype = vim.api.nvim_eval("&filetype")
  vim.cmd(string.format(
    [[
    vsplit
    wincmd l
    enew
    setlocal buftype=nofile | set filetype=%s
    normal! P
    diffthis
    wincmd h | diffthis
  ]],
    ftype
  ))
end

vim.keymap.set("n", "<leader>bc", compare_to_clipboard, { desc = "Compare to clipboard" })

このコードは元ネタがあります。

こちらの方は予めビジュアルモードで選択したテキストと、クリップボードを比較するものであり、また比較中にファイルを編集できないので、合わないなと感じ、改良しました。
VSCodeに近い操作感に近づけられたと思います。

比較画面の閉じ方

ctrl + lで右側のウインドウに移動後、スペース(リーダーキー) b Dで閉じられます。

元ネタのコードはqを押すだけで、比較画面を閉じられます。
簡単に閉じられる方法を実装しても良かったのですが、私は実装しませんでした。

心残り

VSCodeはクリップボードの方の右側のウインドウを編集しようとしても、編集できなくなっているのですが、私のNeovim設定だと右側のウインドウも編集できてしまいます。
右側のウインドウの方だけ、readonlyにして、左側は編集可能にするにはどうしたらよいのでしょう。
どなたかご教授お願い致します。

おまけ

私のNeovimとWeztermの設定貼っておきます。

宣伝

ほぼ毎日ライブコーディングとかしてます。
最近はAI Vtuber作ってます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?