[![Build
Status](https://travis-ci.org/tmux-plugins/tmux-yank.svg?branch=master)](https://travis-ci.org/tmux-plugins/tmux-yank)
[![GitHub
release](https://img.shields.io/github/release/tmux-plugins/tmux-yank.svg)](https://github.com/tmux-plugins/tmux-yank/releases)
[![GitHub
issues](https://img.shields.io/github/issues/tmux-plugins/tmux-yank.svg)](https://github.com/tmux-plugins/tmux-yank/issues)

tmux-yank
=========

Copy to the system clipboard in [`tmux`](https://tmux.github.io/).

Supports:

-   Linux
-   macOS
-   Cygwin
-   Windows Subsystem for Linux (WSL)

Installing
----------

### Via TPM (recommended)

The easiest way to install `tmux-yank` is via the [Tmux Plugin
Manager](https://github.com/tmux-plugins/tpm).

1.  Add plugin to the list of TPM plugins in `.tmux.conf`:

    ``` tmux
    set -g @plugin 'tmux-plugins/tmux-yank'
    ```

2.  Use <kbd>prefix</kbd>–<kbd>I</kbd> install `tmux-yank`. You should now
    be able to `tmux-yank` immediately.
3.  When you want to update `tmux-yank` use <kbd>prefix</kbd>–<kbd>U</kbd>.

### Manual Installation

1.  Clone the repository

    ``` sh
    $ git clone https://github.com/tmux-plugins/tmux-yank ~/clone/path
    ```

2.  Add this line to the bottom of `.tmux.conf`

    ``` tmux
    run-shell ~/clone/path/yank.tmux
    ```

3.  Reload the `tmux` environment

    ``` sh
    # type this inside tmux
    $ tmux source-file ~/.tmux.conf
    ```

You should now be able to use `tmux-yank` immediately.

Requirements
------------

In order for `tmux-yank` to work, there must be a program that store data in
the system clipboard.

### macOS

-   [`reattach-to-user-namespace`](https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard)

**Note**: Some versions of macOS (aka OS X) have been reported to work
without `reattach-to-user-namespace`. It doesn't hurt to have it installed.

-   OS X 10.8: Mountain Lion – *required*
-   OS X 10.9: Mavericks – *required*
-   OS X 10.10: Yosemite – *not required*
-   OS X 10.11: El Capitan – *not required*
-   macOS 10.12: Sierra – *required*

The easiest way to use `reattach-to-user-namespace` with `tmux` is use to
use the [`tmux-sensible`](https://github.com/tmux-plugins/tmux-sensible)
plugin.

To use it manually, use:

``` tmux
# ~/.tmux.conf
set-option -g default-command "reattach-to-user-namespace -l $SHELL"
```

If you have `tmux` 1.5 or newer and are using
[iTerm2](https://www.iterm2.com/) version 3 or newer then the <kbd>y</kbd>
in `copy-mode` and mouse selection will work without `tmux-yank`.

To enable this:

1.  Go into iTerm2's preferences.
2.  Go to the "General" tab.
3.  Check "Applications in terminal may access clipboard"
4.  In `tmux`, ensure `set-clipboard` is turned on:

    ``` sh
    $ tmux show-options -g -s set-clipboard
    set-clipboard on
    ```

#### [HomeBrew](https://brew.sh/) (recommended)

``` sh
$ brew install reattach-to-user-namespace
```

#### MacPorts

``` sh
$ sudo port install tmux-pasteboard
```

### Linux

-   `xsel` (recommended) or `xclip` (for X).
-   `wl-copy` from [wl-clipboard](https://github.com/bugaevc/wl-clipboard) (for Wayland)

If you have `tmux` 1.5 or newer and are using `xterm`, the <kbd>y</kbd> in
`copy-mode` and mouse selection will work without `tmux-yank`. See the
`tmux(1)` man page entry for the `set-clipboard` option.

#### Debian & Ubuntu

``` sh
$ sudo apt-get install xsel # or xclip
```

#### RedHat & CentOS

``` sh
$ sudo yum install xsel # or xclip
```

### Cygwin

-   (*optional*) `putclip` which is part of the `cygutils-extra` package.

### Windows Subsystem for Linux (WSL)

-   `clip.exe` is shipped with Windows Subsystem for Linux.

Configuration
-------------

### Key bindings

-   Normal Mode
    -   <kbd>prefix</kbd>–<kbd>y</kbd> — copies text from the command line
        to the clipboard.

        Works with all popular shells/repls. Tested with:

        -   shells: `bash`, `zsh` (with `bindkey -e`), `tcsh`
        -   repls: `irb`, `pry`, `node`, `psql`, `python`, `php -a`,
            `coffee`
        -   remote shells: `ssh`, [mosh](http://mosh.mit.edu/)
        -   vim/neovim command line (requires
            [vim-husk](https://github.com/bruno-/vim-husk) or
            [vim-rsi](https://github.com/tpope/vim-rsi) plugin)

    -   <kbd>prefix</kbd>–<kbd>Y</kbd> — copy the current pane's current
        working directory to the clipboard.

-   Copy Mode
    -   <kbd>y</kbd> — copy selection to system clipboard.
    -   <kbd>Y</kbd> (shift-y) — "put" selection. Equivalent to copying a
        selection, and pasting it to the command line.


### Default and Preferred Clipboard Programs

tmux-yank does its best to detect a reasonable choice for a clipboard
program on your OS.

If tmux-yank can't detect a known clipboard program then it uses the
`@custom_copy_command` tmux option as your clipboard program if set.

If you need to always override tmux-yank's choice for a clipboard program,
then you can set `@override_copy_command` to force tmux-yank to use whatever
you want.

Note that both programs _must_ accept `STDIN` for the text to be copied.

An example of setting `@override_copy_command`:

``` tmux
# ~/.tmux.conf

set -g @custom_copy_command 'my-clipboard-copy --some-arg'
# or
set -g @override_copy_command 'my-clipboard-copy --some-arg'
```

### Linux Clipboards

Linux has several cut-and-paste clipboards: `primary`, `secondary`, and
`clipboard` (default in tmux-yank is `clipboard`).

You can change this by setting `@yank_selection`:

``` tmux
# ~/.tmux.conf

set -g @yank_selection 'primary' # or 'secondary' or 'clipboard'
```

With mouse support turned on (see below) the default clipboard for mouse
selections is `primary`.

You can change this by setting `@yank_selection_mouse`:

``` tmux
# ~/.tmux.conf

set -g @yank_selection_mouse 'clipboard' # or 'primary' or 'secondary'
```

### Controlling Yank Behavior

By default, `tmux-yank` will exit copy mode after yanking text. If you wish to
remain in copy mode, you can set `@yank_action`:

``` tmux
# ~/.tmux.conf

set -g @yank_action 'copy-pipe' # or 'copy-pipe-and-cancel' for the default
```

### Mouse Support

`tmux-yank` has mouse support enabled by default. It will only work if `tmux`'s
built-in mouse support is also enabled (with `mouse on` since `tmux` 2.1, or
`mode-mouse on` in older versions).

To yank with the mouse, click and drag with the primary button to begin
selection, and release to yank.

If you would prefer to disable this behavior, or provide your own bindings for
the `MouseDragEnd1Pane` event, you can do so with:

``` tmux
# ~/.tmux.conf

set -g @yank_with_mouse off # or 'on'
```

If you want to remain in copy mode after making a mouse selection, set
`@yank_action` as described above.

### vi mode support

If using `tmux` 2.3 or older *and* using vi keys then you'll have add the
following configuration setting:

``` tmux
# ~/.tmux.conf

set -g @shell_mode 'vi'
```

This isn't needed with `tmux` 2.4 or newer.

### Screen-cast

[![screencast
screenshot](/video/screencast_img.png)](https://vimeo.com/102039099)

**Note**: The screen-cast uses <kbd>Control</kbd>–<kbd>y</kbd> for
"put selection". Use <kbd>Y</kbd> in `v2.0.0` and later.

### Other tmux plugins

-   [tmux-copycat](https://github.com/tmux-plugins/tmux-copycat) - a plugin
    for regular expression searches in tmux and fast match selection
-   [tmux-open](https://github.com/tmux-plugins/tmux-open) - a plugin for
    quickly opening highlighted file or a URL
-   [tmux-continuum](https://github.com/tmux-plugins/tmux-continuum) -
    automatic restoring and continuous saving of tmux environment.

### License

[MIT](LICENSE.md)
