From 1af02801a09386d47458edfc5eea8adfdcf2d622 Mon Sep 17 00:00:00 2001 From: Marco Hinz Date: Mon, 11 Jan 2016 03:11:58 +0100 Subject: [PATCH] Clipboard: rewrite everything References #34. --- CHANGELOG.md | 4 ++ README.md | 144 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 89 insertions(+), 59 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d9a3b6..e0c4796 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,10 @@ All notable changes to this project will be documented in this file. - Misc: [Easter eggs](README.md#easter-eggs) - Misc: [Why hjkl for navigation?](README.md#why-hjkl-for-navigation) +### Changed + +- Usage: rewrote [Clipboard](README.md#clipboard) + ## [1.1] - 2016-01-07 ### Added diff --git a/README.md b/README.md index 2e64a47..5dd6c3d 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,8 @@ added every day. Things about to be added can be found here: - [Getting help offline](#getting-help-offline) - [Getting help online](#getting-help-online) - [Clipboard](#clipboard) - - [Clipboard theory (Windows, OSX)](#clipboard-theory-windows-osx) - - [Clipboard theory (Linux, BSD, ...)](#clipboard-theory-linux-bsd-) - - [Clipboard usage](#clipboard-usage) + - [Clipboard usage (Windows, OSX)](#clipboard-usage-windows-osx) + - [Clipboard usage (Linux, BSD, ...)](#clipboard-usage-linux-bsd-) - [Restore cursor position when opening file](#restore-cursor-position-when-opening-file) - [Editing remote files](#editing-remote-files) - [Managing plugins](#managing-plugins) @@ -534,22 +533,82 @@ If you want to report a Vim bug, use the #### Clipboard -##### Clipboard theory (Windows, OSX) +First of all, Vim needs certain _features_ compiled in for the clipboard to +work. If you want to know what features your version of Vim has compiled in and +whether it comes with GUI support or not, check the output of `:version`. -Some theory first: Windows comes with a +It should contain `+clipboard` (`-clipboard` means "not compiled in"), for +general access to the clipboard. + +If that's not the case and you installed Vim from a package manager, make sure +to install a package called `vim-x11`, `vim-gtk`, `vim-gnome` or similar. Even +if you never use the GUI version of Vim, these packages bundle a Vim with a +bigger feature set compiled in. + +You also need `+xterm_clipboard` if you want to use the `'clipboard'` option on +a Unix system and don't have a Vim with GUI support. + +Related help: + +``` +:h 'clipboard' +:h gui-clipboard +:h gui-selections +``` + +Also see: [Bracketed paste (or why do I have to set 'paste' all the +time?)](#bracketed-paste-or-why-do-i-have-to-set-paste-all-the-time) + +##### Clipboard usage (Windows, OSX) + +Windows comes with a [clipboard](https://msdn.microsoft.com/en-us/library/windows/desktop/ms649012(v=vs.85).aspx) and OSX comes with a [pasteboard](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PasteboardGuide106/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008100-SW1). -Both work like most users would expect them to work. You copy selected text (or -even other data types) with `ctrl+c`/`cmd+c` and paste them in another -application with `ctrl+v`/`cmd+v`. +Both work like most users would expect them to work. You copy selected text with +`ctrl+c`/`cmd+c` and paste them in another application with `ctrl+v`/`cmd+v`. Note that copied text is actually transferred to the clipboard, so you can close the application you copied from before pasting in another application without problems. -##### Clipboard theory (Linux, BSD, ...) +Whenever this happens, the clipboard register `*` gets filled with the +selection. From Vim use `"*y` and `"*p` to yank and paste from the clipboard +respectively. + +If you don't even want to specify the `*` register all the time, put this in +your vimrc: + +```viml +set clipboard=unnamed +``` + +Usually all yank/delete/put operations fill the `"` register, now the `*` +register is used for the same operations, therefore simply `y` and `p` will be +enough. + +Let me repeat: Using the option above means that every yank/paste, even when +only used in the same Vim window, will alter the clipboard. Decide for yourself +if this is useful or not. + +If you're even too lazy to type `y`, you can send every visual selection to the +clipboard by using these settings: + +```viml +set clipboard=unnamed,autoselect +set guioptions+=a +``` + +Related help files: + +``` +:h clipboard-unnamed +:h autoselect +:h 'go_a' +``` + +##### Clipboard usage (Linux, BSD, ...) If your OS uses [X](http://www.x.org/wiki), things work a bit different. X implements the [X Window System @@ -568,14 +627,8 @@ Nowadays data is transferred between applications by the means of From the 3 _selection atoms_ defined, only 2 are used in practice: PRIMARY and CLIPBOARD. -The **PRIMARY selection** is used when you simply select text in any -application. Then it can be pasted somewhere else via `middle-click` or -`shift+insert`. - -The **CLIPBOARD selection** is used when you copy/paste like you would normally -do, via `ctrl+c`/`ctrl+v` and the likes. - Selections work roughly like this: + ``` Program A: Program A: assert ownership of CLIPBOARD @@ -586,61 +639,34 @@ Program A: respond to request and send data to Program B Program B: receives data from Program A and inserts it into the window ``` +- **PRIMARY selection**: Used when you select text in any application. + Afterwards it can be pasted somewhere else via `middle-click` or + `shift+insert`. In Vim you access the selection using the `*` register. +- **CLIPBOARD selection**: Used when you copy/paste like you would normally do, + via `ctrl+c`/`ctrl+v` and the likes. In Vim you access this selection by using + the `+` register. + **NOTE**: Selections (no, not even the CLIPBOARD selection) are never kept in the X server! Thus you lose the data copied with `ctrl+c` when the application closes. -##### Clipboard usage - -First of all, Vim needs certain _features_ compiled in for the clipboard to -work. `:version` shows all features and should contain `+clipboard` and also -`+xterm_clipboard` if you use Vim in a terminal emulator together with the X -server. If that's not the case and you installed Vim from a package manager, -make sure to install a package called `vim-x11`, `vim-gtk`, `vim-gnome` or -similar. Even if you never use the GUI version of Vim, these packages bundle a -Vim with a bigger feature set compiled in. - -As mentioned in [Registers?](#registers), the clipboard registers are `*` a `+`. - -Usage under **Windows** and **OSX** is easy: It doesn't matter whether you use -the `*` or `+` register for transferring data between Vim and the -clipboard/pasteboard. Both registers always have the same content on these -systems. `:reg` will only show the `*` register, though. - -Under systems using **X11**, `*` is used for the PRIMARY selection and `+` for +Use `"*p` to paste the PRIMARY selection or `"+y1G` to yank the entire file to the CLIPBOARD selection. -So, no matter what system you're on, you can copy data to the "clipboard" via -`"+y` and paste from it via `"+p`. - -Remember that the unnamed register (`"`) always holds the text of the last yank -or deletion. That's why you can simply use `y` in one Vim window and paste in -another one via `p`. All operators and commands that optinally take registers -default to the unnamed register. - -If you want a more seemless interaction between Vim and other applications -without specifying `"+` all the time, use this: +If you happen to access one of the two registers all the time, consider using: ```viml -set clipboard=unnamedplus +set clipboard^=unnamed " * register +" or +set clipboard^=unammedplus " + register ``` -This basically synchronizes the `"` and `+` registers. +(The `^=` is used to prepend to the default value, `:h :set^=`.) -If you don't even want to hit `y`, this this instead: +This will make all yank/delete/put operations use either `*` or `+` instead of +the unnamed register `"`. Afterwards you can simply use `y` or `p` for accessing +your chosen X selection. -```viml -set clipboard=autoselectplus " used in terminal Vim -set guioptions+=a " used in GUI Vim -``` - -Vim comes with a pretty extensive documentation: - -``` -:h 'clipboard' -:h gui-clipboard -:h gui-selections -``` #### Restore cursor position when opening file Without this, you will always be at line 1 when opening a file. With this, you