0
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?

Vimの+clipboardがオフになっている環境で、Vim内からクリップボードへコピーを行う方法

Posted at

要約

Vimの+clipboardがオフになっている環境で、Vim内からクリップボードコピーを行うには以下のことをすればよいです。これをすることで、VimのコマンドモードからF8キーを押すだけで、Vimで書いたテキストがクリップボードへコピーされるようになります。

動機

弊学の学内環境にあるVimは、+clipboardがオフになっています。なので、Vimで書いたプログラムをクリップボードへコピーするには毎回Vimを閉じて別の操作でクリップボードへコピーする必要がありした。競技プログラミングなどのコンテスト中などは、できるだけそうした操作にかける時間を減らしたいです。この記事は、上記の問題に対する自分なりの答えをまとめたものです。

ファイルの内容をクリップボードに保存するJavaプログラムをつくる

以下のJavaプログラムをMain.javaに保存してください。このJavaプログラムは以下の2つのことを行います。

  • 第二引数で指定されたパスにあるファイルの中身を読み込む
  • 読み込んだファイルの中身をクリップボードへコピーする
  • Enterキーが押されたらプログラムを終了する

ところで、このプログラムはEnterキーが押されないとプログラムが終了しないようにしてます。これは、クリップボードにデータを保存したプロセスが死ぬと、そのデータも死ぬというX Window Systemの仕様が要因となっています。

import java.awt.Toolkit;
import java.awt.datatransfer.*;
import java.io.IOException;
import java.nio.file.*;
import java.util.*;

public class Main {
        public static void main(String[] args) {
                Path path = Paths.get(args[0]);
                StringBuffer content = new StringBuffer();
                try {
                        String readString = Files.readString(path);
                        content.append(readString);
                } catch (IOException e) {
                        e.printStackTrace();
                }

                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                StringSelection stringSelection = new StringSelection(content.toString());
                clipboard.setContents(stringSelection, null);
         
                Scanner scanner = new Scanner(System.in);
                System.out.println("Press Enter key to continue");
                scanner.nextLine();
        }
}

Main.javaを保存したら、それをコンパイルします。

javac Main.java

コンパイルされたプログラムは、Main.classというファイル名で保存されます。私は分かりやすいように、Main.classをホームページディレクトリに移動しておきました。

.vimrcに先ほどのJavaプログラムを起動するautomodをつくる

ご自身の.vimrcに次のコードを追加してください。コードにあるXXXには、Main.classを保存したディレクトリに移動するコマンドを入力してください。Main.classをホームディレクトリに保存した場合は、cdだけで大丈夫です。(ターミナルでcdと入力すると、ホームディレクトリに移動するため)

autocmd nnoremap <F8> :w <bar> !XXX && java Main %:p:h/%:t && cd -<CR>

おわりに

これでVimのコマンドモードからF8キーを押すと、Vimで編集したテキストがクリップボードにコピーされるはずです。

0
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
0
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?