runtime(tutor): Add a section on text objects and special registers to Chapter 2
Commit: https://github.com/vim/vim/commit/b87f133b0724f7328e7dd41dd611af67f4ae3e39 Author: Christian Brabandt <c...@256bit.org> Date: Wed Aug 27 21:28:50 2025 +0200 runtime(tutor): Add a section on text objects and special registers to Chapter 2 fixes: https://github.com/vim/vim/issues/17808 closes: https://github.com/vim/vim/issues/18105 Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/runtime/tutor/tutor1 b/runtime/tutor/tutor1 index 04b490f0c..790de3944 100644 --- a/runtime/tutor/tutor1 +++ b/runtime/tutor/tutor1 @@ -944,7 +944,7 @@ NOTE: Completion works for many commands. Just try pressing CTRL-D and ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This concludes Chapter 1 of the Vim Tutor. Consider continuing with - Chapter 2. + Chapter 2 which covers registers, marks and the use of text objects. It was intended to give a brief overview of the Vim editor, just enough to allow you to use the editor fairly easily. It is far from complete as Vim diff --git a/runtime/tutor/tutor2 b/runtime/tutor/tutor2 index 631b99445..7c094f17c 100644 --- a/runtime/tutor/tutor2 +++ b/runtime/tutor/tutor2 @@ -12,7 +12,43 @@ depending upon how much time is spent with experimentation. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lesson 2.1.1: THE NAMED REGISTERS + + Lesson 2.1.1: MASTERING TEXT OBJECTS + + ** Operate on logical text blocks with precision using text objects ** + + 1. Practice word operations: + - Place cursor on any word in the line below + - Type diw to delete INNER word (word without surrounding space) + - Type daw to delete A WORD (including trailing whitespace) + - Try with other operators: ciw (change), yiw (yank), gqiw (format) + +---> Practice on: "Vim's", (text_object), and 'powerful' words here. + + 2. Work with bracketed content: + - Put cursor inside any () {} [] <> pair below + - Type di( or dib (delete inner bracket) + - Type da( or dab (delete around brackets) + - Try same with i"/a" for quotes, it/at for HTML/XML tags + +---> Test cases: {curly}, [square], <angle>, and "quoted" items. + + 3. Paragraph and sentence manipulation: + - Use dip to delete inner paragraph (cursor anywhere in paragraph) + - Use vap to visually select entire paragraph + - Try das to delete a sentence (works between .!? punctuation) + + 4. Advanced combinations: + - ciwnew<ESC> - Change current word to "new" + - yss"<ESC> - Wrap entire line in quotes (vim-surround plugin style) + - gUit - Uppercase inner HTML tag content + - va"p - Select quoted text and paste over it + +---> Final exercise: (Modify "this" text) by [applying {various} operations]< + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lesson 2.1.2: THE NAMED REGISTERS ** Store two yanked words concurrently and then paste them ** @@ -45,7 +81,7 @@ REFERENCE: Registers :h registers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lesson 2.1.2: THE EXPRESSION REGISTER + Lesson 2.1.3: THE EXPRESSION REGISTER ** Insert the results of calculations on the fly ** @@ -72,7 +108,7 @@ REFERENCE: Expression Register :h quote= ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lesson 2.1.3: THE NUMBERED REGISTERS + Lesson 2.1.4: THE NUMBERED REGISTERS ** Press yy and dd to witness their effect on the registers ** @@ -107,11 +143,55 @@ NOTE: Whole line deletions (dd) are much longer lived in the numbered registers REFERENCE: Numbered Registers :h quote0 - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lesson 2.1.4: THE BEAUTY OF MARKS + Lesson 2.1.5: SPECIAL REGISTERS + ** Use system clipboard and blackhole registers for advanced editing ** + + Note: Clipboard use requires X11/Wayland libraries on Linux systems AND + a Vim built with "+clipboard" (usually a Huge build). Check with + ":version" and ":echo has('clipboard_working')" + + 1. Clipboard registers + and * : + - "+y - Yank to system clipboard (e.g. "+yy for current line) + - "+p - Paste from system clipboard + - "* is primary selection on X11 (middle-click), "+ is clipboard + +---> Try: "+yy then paste into another application with Ctrl-V or Cmd+V + + 2. Blackhole register _ discards text: + - "_daw - Delete word without saving to any register + - Useful when you don't want to overwrite your default " register + - Note this is using the "a Word" text object, introduced in a previous + lession + - "_dd - Delete line without saving + - "_dap - Delete paragraph without saving + - Combine with counts: 3"_dw + +---> Practice: "_diw on any word to delete it without affecting yank history + + 3. Combine with visual selections: + - Select text with V then "+y + - To paste from clipboard in insert mode: Ctrl-R + + - Try opening another application and paste from clipboard + + 4. Remember: + - Clipboard registers work across different Vim instances + - Clipboard register is not always working + - Blackhole prevents accidental register overwrites + - Default " register is still available for normal yank/paste + - Named registers (a-z) remain private to each Vim session + + 5. Clipboard troubleshooting: + - Check support with :echo has('clipboard_working') + - 1 means available, 0 means not compiled in + - On Linux, may need vim-gtk or vim-x11 package + (check :version output) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lesson 2.1.6: THE BEAUTY OF MARKS ** Code monkey arithmetic avoidance ** @@ -163,32 +243,45 @@ REFERENCE: Marks :h marks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lesson 2.1 SUMMARY + Lesson 2.1 SUMMARY + + 1. Text objects provide precision editing: + - iw/aw - inner/around word + - i[/a[ - inner/around bracket + - i"/a" - inner/around quotes + - it/at - inner/around tag + - ip/ap - inner/around paragraph + - is/as - inner/around sentence - 1. To store (yank, delete) text into, and retrieve (paste) from, a total of + 2. To store (yank, delete) text into, and retrieve (paste) from, a total of 26 registers (a-z) - 2. Yank a whole word from anywhere within a word: yiw - 3. Change a whole word from anywhere within a word: ciw - 4. Insert text directly from registers in insert mode: (C-r)a + 3. Yank a whole word from anywhere within a word: yiw + 4. Change a whole word from anywhere within a word: ciw + 5. Insert text directly from registers in insert mode: (C-r)a - 5. Insert the results of simple arithmetic operations: <CTRL-R> followed by + 6. Insert the results of simple arithmetic operations: <CTRL-R> followed by =60*60<ENTER> in insert mode - 6. Insert the results of system calls: <CTRL-R> followed by + 7. Insert the results of system calls: <CTRL-R> followed by =system('ls -1')<ENTER> in insert mode - 7. Inspect registers with :reg - 8. Learn the final destination of whole line deletions: dd in the numbered + 8. Inspect registers with :reg + 9. Learn the final destination of whole line deletions: dd in the numbered registers, i.e. descending from register 1 - 9. Appreciate that whole line deletions are preserved in the numbered registers longer than any other operation - 9. Learn the final destination of all yanks in the numbered registers and + 10. Learn the final destination of all yanks in the numbered registers and how ephemeral they are - 10. Place marks from command mode m[a-zA-Z0-9] - 11. Move line-wise to a mark with ' + 11. Place marks from command mode m[a-zA-Z0-9] + 12. Move line-wise to a mark with ' + + 13. Special registers: + - "+/* - System clipboard (OS dependent) + - "_ - Blackhole (discard deleted/yanked text) + - "= - Expression register ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1urLqU-005ojJ-HU%40256bit.org.