4

tmux で emacs コピー モードを使用して、ファイルの内容全体をコピーしたいと考えています。

ただし、コピー モードに入ると、C-space と入力してテキストの強調表示を開始し、次に M-> と入力してファイルの末尾にジャンプすると、tmux ペインの下部にあるファイル情報セクションにジャンプするだけになります。

これが何が起こるかを示す写真です:

編集: 私は新しいユーザーで、まだ写真を投稿できないようです。ただし、基本的には、tmux コピー モードで黄色に強調表示された (選択された) テキストを想像できます。ファイルの末尾ではなく、ペインの下部のみを強調表示できます (これは次のようになります)。

-u-:----F1 file_name.rb      Top L1      (Ruby)---------------------------------

私の質問は、どうすればコピー モードに入り、テキストの選択を開始し、ファイルの最後にジャンプできるかということです。

これが私の目標 (tmux でファイルの内容全体をコピーする) を達成するための最良の方法ではない場合、それを行うためのより良い方法は何ですか?

どうも!

ps

ここの指示に従いました: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard

また、実用的なtmuxの本からの指示。

それが役立つ場合は、ここに私の.tmux.confファイルからの関連行があります(これは主に実用的なtmuxブックからコピーされました):

# use pbcopy|pbpaste wrapper script
set-option -g default-command "reattach-to-user-namespace -l zsh"

# send contents of current tmux buffer to system clipboard
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"

# support pasting from the system clipboard
bind C-v run "tmux set-buffer $(reattach-to-user-namespace pbpaste); tmux paste buffer"

# overriding "auto-detection" to always use emacs
set-option -g status-keys emacs
set-option -gw mode-keys emacs
4

2 に答える 2

3

答えはイエスで、とても簡単です:

tmux コマンドのいずれかを実行する必要があります。Ctrl+b+: を実行してコマンドを入力すると、tmux コマンドを実行できます。

load-buffer path

また

loadb path

略して

于 2012-10-12T00:35:45.383 に答える
1

tmuxは、提供された tty でemacsを実行していることを実際には認識していません。その tty に何が書き込まれたかを知っているだけです。そのため、 tmux でM-> を押すcopy-modeと、ペインのスクロールバック履歴の一番下に移動するだけです (M-> while incopy-modeは ( copy-mode-specific) tmuxコマンドを実行しhistory-bottomます)。

emacs内からこの問題に取り組む必要があります。emacsのキーにバインドできる (対話的に実行可能な) 関数の例を次に示します。

(defun write-region-to-tmux-buffer (beg end)
  (interactive "r")
  (shell-command-on-region beg end "tmux load-buffer -" nil nil nil t))

(defun write-buffer-to-tmux-buffer ()
  (interactive)
  (write-region-to-tmux-buffer (point-min) (point-max)))

バッファーをバイパスして代わりにファイルを使用する場合 (つまり、バッファーの (変更されている可能性がある) コンテンツではなく、ディスク上のファイルからバッファーを作成する)、次のようなものを使用できます。

(defun write-buffer-file-to-tmux-buffer ()
  (interactive)
  (let ((fn (buffer-file-name)))
    (if fn
        (shell-command
         (concat "tmux load-buffer "
                 (shell-quote-argument fn)))
      (error "Not a file-backed buffer"))))
于 2012-09-06T04:14:59.557 に答える