質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.21%

tmuxのコピーモードのスクロールがvim上でできない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 3,368

skzwksk

score 10

tmuxのコピーモードのスクロールをvim上でもしたい

iterm2でtmux 2.3とvim 8.0を使用しています。
コマンドラインではtmuxのコピーモードでスクロールが^+F^+Bでスクロールができます。

一方、vim起動中でコピーモードに入って^+B,kを押した際、ファイルの上にスクロールするのではなく、iterm上でvim ファイル名を入力したコマンドより上のコマンドにスクロールしてしまいます。

vim起動中でコピーモードに入って^+F,jを押した際、vimで開いたファイルの下にはスクロールできず、全く下にスクロールできません。

実行環境

実行した.vimrc.tmux.confは以下のとおりです。
.vimrc

"" encoding
scriptencoding utf8
set fileencoding=utf-8
set fileencodings=utf-8,iso-2022-jp,euc-jp,sjis

"" Set Options

" don't use backup or swap files
set nowritebackup nobackup noswapfile

" how many stock command history
set history=1000

" use mouse
if has('mouse')
  set mouse=a
  if has('mouse_sgr')
    set ttymouse=sgr
  elseif v:version > 703 || v:version is 703 && has('patch632')
    set ttymouse=sgr
  else
    set ttymouse=xterm2
  endif
endif

" Indicates a fast terminal connection
set ttyfast

" カーソル移動で行を越えて移動させるか
set whichwrap=b,s,[,],<,>

" 新しい行のインデントを現在行と同じにする
set autoindent

" ファイルにカーソルの位置を記憶
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
endif

"" Search
" case sensitive for search
set noignorecase nosmartcase
" Show matches while typing
set incsearch
" highlighted search index
set hlsearch
" wrapscan
set wrapscan

"" Appearance
" the last window will have a status line always
set laststatus=2
" モードを表示
set showmode
" ルーラーを表示
set ruler
" 打ったキーを表示
set showcmd
" 括弧の対応の表示
set showmatch matchtime=1

"" Indent
autocmd FileType sh         setlocal shiftwidth=2 softtabstop=2 tabstop=2 expandtab
autocmd FileType apache     setlocal shiftwidth=4 softtabstop=4 tabstop=4 expandtab
autocmd FileType css        setlocal shiftwidth=4 softtabstop=4 tabstop=4 noexpandtab
autocmd FileType diff       setlocal shiftwidth=4 softtabstop=4 tabstop=4 noexpandtab
autocmd FileType html       setlocal shiftwidth=2 softtabstop=2 tabstop=2 expandtab
autocmd FileType java       setlocal shiftwidth=4 softtabstop=4 tabstop=4 expandtab
autocmd FileType javascript setlocal shiftwidth=4 softtabstop=4 tabstop=4 noexpandtab
autocmd FileType ruby       setlocal shiftwidth=2 softtabstop=2 tabstop=2 expandtab
autocmd FileType eruby      setlocal shiftwidth=2 softtabstop=2 tabstop=2 expandtab
autocmd FileType sql        setlocal shiftwidth=4 softtabstop=4 tabstop=4 expandtab
autocmd FileType tex        setlocal shiftwidth=2 softtabstop=2 tabstop=2 expandtab
autocmd FileType vim        setlocal shiftwidth=2 softtabstop=2 tabstop=2 expandtab
autocmd FileType xml        setlocal shiftwidth=4 softtabstop=4 tabstop=4 noexpandtab
autocmd FileType yaml       setlocal shiftwidth=2 softtabstop=2 tabstop=2 expandtab
autocmd FileType zsh        setlocal shiftwidth=2 softtabstop=2 tabstop=2 expandtab
autocmd FileType coffee     setlocal shiftwidth=2 softtabstop=2 tabstop=2 expandtab

"" Key Bindings
" コマンドで空行挿入したい
set t_Co=256
set t_ut=
" 挿入開始以前の文字や改行も削除
set backspace=indent,eol,start

"" Color
set term=xterm-256color
syntax on " シンタックスハイライト

"" Plugin
filetype plugin indent on " ファイルタイププラグインを有効にする

.tmux.conf

# reload config
bind r source-file ~/.tmux.conf

# zshでtmuxを起動
set-option -g default-shell /bin/zsh

# browse URL
bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; run-shell "$TERMINAL -e urlview /tmp/tmux-buffer"
bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; new-window -n "urlview" '$SHELL -c "urlview < /tmp/tmux-buffer"'

# max scroloback line
set -g history-limit 10000

# ウィンドウのインデックスを1から始める
set -g base-index 1

# ペインのインデックスを1から始める
setw -g pane-base-index 1

# renumber the windows
set-option -g renumber-windows on

# キーストロークのディレイを減らす
set -sg escape-time 0

# mouseでスクロール
set-option -g mouse on
bind -n WheelUpPane   select-pane -t= \; copy-mode -e \; send-keys -M
bind -n WheelDownPane select-pane -t= \;                 send-keys -M

#---------------------------------------------------------------------------}}}
# Color                                                                     {{{
#------------------------------------------------------------------------------

# use 256colors
set -g default-terminal screen-256color

# pane border
set -g pane-active-border-fg colour197
set -g pane-active-border-bg colour234
set -g pane-border-fg colour239
set -g pane-border-bg colour234

# message line
set -g message-fg white
set -g message-bg colour235
set -g message-attr bright


#---------------------------------------------------------------------------}}}
# Keybind (normal mode)                                                     {{{
#------------------------------------------------------------------------------

# set prefix key
unbind C-b
set -g prefix C-t
bind C-t send-prefix

# ペインの移動2
# Shift + 上下左右でペインを移動できるようにする。(<Prefix>不要)
# 行頭に"bind -n"をつけるとPrefixが不要になる。
bind -n S-left select-pane -L
bind -n S-down select-pane -D
bind -n S-up select-pane -U
bind -n S-right select-pane -R

# コピーモードを設定する
## viのキーバインドを使用する
setw -g mode-keys vi
## クリップボード共有を有効にする
set-option -g default-command "reattach-to-user-namespace -l zsh"
## コピーモードの操作をvi風に設定する
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
bind-key -t vi-copy C-v rectangle-toggle

# vim like
bind-key s split-window -v -c "#{pane_current_path}"
bind-key v split-window -h -c "#{pane_current_path}"

#---------------------------------------------------------------------------}}}

調査したこと

.vimrcの方のマウスの設定が悪いのかと思っています。
マウスの下へのスクロールではしっかりVvimで開いたファイルを見ることができます。
上のスクロールでは、ファイルではなくコマンドラインを表示しています。

この設定が影響しているかもしれないので、自分でも調査しようと思っています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

残念ながら tmux のコピーモードで Vim のバッファのスクロールは行なえません。
tmux のコピーモードはあくまで端末のスクロールになります。Vim は端末の内容を書き換えて動作しているので、端末のスクロールを行っても Vim の外側の世界にしか干渉できません。

代替手段として、tmux には tmux のバッファ(コピーモードでコピーした際に内容が入る場所)を操作する機能があるので、これを Vim 側から呼び出せば、Vim のバッファの内容を tmux のバッファにコピーできます。
これを行えるプラグインとして fakeclip.vim があります。このプラグインをインストールして、Vim のコピーしたい範囲を選択し、"&y を実行することで、対象を tmux のバッファにコピーできます。
他にも tmux と連携できるプラグインはあるかもしれないので、よければ探してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/27 21:03

    tmuxはitermのスクリーンをスクロールすることしかできないのですね。大変わかりやすく教えていただきありがとうございます。

    `.vimrc`に以下を追加することで解決しました。
    ```
    call dein#add('kana/vim-fakeclip')
    " "&yでコピーした内容を外部のクリップボードと共有(kana/vim-fackclip)
    set clipboard=unnamed
    ```

    これでvim実行中にコピーしたい範囲を選択して`"&y`を押すことで、外部のアプリケーションに`command + v`でコピー可能になりました
    また、外部のアプリケーションで`command + c`でコピーした内容を、vim内で`"&p`で貼り付け可能になりました。

    大変快適となりました。ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る