HackHubAfrica
  • Welcome
  • Basics
    • Quickstart
      • Publish your docs
    • Linux
      • Buffers
      • Vim
      • PKGBUILD
      • SWIG
    • MITR3ATTCK
      • APT groups
    • LAN
  • Docker
    • Installation
    • Lab
    • Wazuh
    • ELK
  • WWW
    • WayBackThen
Powered by GitBook
On this page
  • πŸ”Ή Custom Key Mappings for Faster Buffer Switching
  • πŸ”Ή Advanced: Buffer Navigation with Fuzzy Search (Neovim)
  • πŸ”Ή Want a Tab-Like Behavior with Buffers?
  • Replacing Words
Edit on GitHub
  1. Basics
  2. Linux

Buffers

πŸ”Ή What Are Buffers?

A buffer is a temporary in-memory representation of an open file or unsaved text inside an editor. Think of buffers as "open documents" that you can switch between without closing them.

πŸ› οΈ Buffers in Vim/Neovim/GVim

  • When you open a file in Vim, it gets loaded into a buffer.

  • You can open multiple buffers at the same time without opening multiple windows or tabs.

  • Buffers can hold files, temporary text, or unsaved changes.

  • Even if a buffer is hidden, it remains in memory and can be switched back to.

πŸ› οΈ Buffers in Emacs

  • Emacs also uses buffers, but it treats everything as a buffer, including files, help pages, terminal emulators, and interactive shells.

  • Unlike Vim, Emacs does not have a strict "tab" system, as all content is just another buffer.


In Vim, Neovim, and GVim, you can list all open buffers and switch between them using the following commands:

1️⃣ List All Open Buffers

In normal mode, type:

:ls

or

:buffers

This will show a list of open buffers with their buffer numbers, status, and filenames.

  • # β†’ Indicates the alternate buffer

  • + β†’ The currently active buffer

  • % β†’ The current buffer

  • - β†’ Previously active buffer


2️⃣ Switch Between Buffers

You can switch between buffers using their buffer number or by cycling through them.

Switch to a Specific Buffer by Number

Use:

:buffer <buffer_number>

Example:

:buffer 3

(This will switch to buffer 3.)

Cycle Through Buffers

  • Next Buffer:

    :bnext
or simply
    :bn
  • Previous Buffer:

    :bprevious
or simply
    :bp

Switch to Last Used Buffer

:b#

3️⃣ Closing Buffers

  • Close the current buffer without quitting Vim:

    :bd
  • Close a specific buffer by number:

    :bd <buffer_number>
Example:
    :bd 3
  • Close all buffers except the current one:

    vim
    
    `:bufdo bd`
or
    :%bd|e#

4️⃣ (Optional) Fuzzy Buffer Switching

If you're using Neovim with Telescope:

:Telescope buffers

This will open a fuzzy search window for buffers.


# custom key mapping for faster buffer switching? πŸš€

πŸ”Ή Custom Key Mappings for Faster Buffer Switching

Here are some handy key mappings for navigating buffers quickly in Vim/Neovim. Add these to your ~/.vimrc (Vim/GVim) or ~/.config/nvim/init.vim (Neovim):

" Switch to the next buffer nnoremap <Tab> :bnext<CR>  " Switch to the previous buffer nnoremap <S-Tab> :bprevious<CR>  " Close the current buffer nnoremap <Leader>bd :bd<CR>  " Show buffer list and select one using fzf (if installed) nnoremap <Leader>bl :ls<CR>:buffer<Space>

πŸ”Ή Explanation of Key Bindings

  • <Tab> β†’ Move to the next buffer.

  • <Shift-Tab> β†’ Move to the previous buffer.

  • <Leader>bd β†’ Delete (close) the current buffer.

  • <Leader>bl β†’ List buffers and select one by typing its number.

Note: The <Leader> key is usually mapped to \ (backslash) or <Space> (which you can configure in your Vim settings).


πŸ”Ή Advanced: Buffer Navigation with Fuzzy Search (Neovim)

If you use Telescope (Neovim Plugin), you can add this key mapping:


`nnoremap <Leader>bb :Telescope buffers<CR>`

Now pressing <Leader>bb will show a fuzzy search window to switch between buffers quickly.


πŸ”Ή Want a Tab-Like Behavior with Buffers?

Vim tabs and buffers are different concepts. If you want buffers to behave like tabs, try:

set hidden

This allows you to switch buffers without closing unsaved files.


πŸ“Œ Conclusion

  • Buffers are temporary storage for open files (like tabs in a browser but more lightweight).

  • Both Vim and Emacs use buffers, but Emacs extends the concept further.

  • Key mappings make buffer switching faster (<Tab>, <S-Tab>, <Leader>bd).

  • Telescope (Neovim) makes searching through buffers even smoother.

Would you like an autoclosing buffer manager (like BufOnly or bufkill.vim) for better control? πŸš€

Here’s the Lua version of your key mappings for Neovim. Add this to your init.lua or inside a lua configuration file like ~/.config/nvim/lua/keymaps.lua and source it.

πŸ”Ή Lua Key Mappings for Buffers

-- Define a shortcut for setting keymaps 
local keymap = vim.keymap.set local opts = { noremap = true, silent = true }  
-- Switch to the next buffer 
keymap("n", "<Tab>", ":bnext<CR>", opts)  -- Switch to the previous buffer 
keymap("n", "<S-Tab>", ":bprevious<CR>", opts)  
-- Close the current buffer 
keymap("n", "<Leader>bd", ":bd<CR>", opts)  
-- Show buffer list and select one using FZF (if installed) 
keymap("n", "<Leader>bl", ":ls<CR>:buffer<Space>", opts)  -- Show buffer list using Telescope (if installed) 
keymap("n", "<Leader>bb", ":Telescope buffers<CR>", opts)

πŸ”Ή Explanation

  • vim.keymap.set(mode, key, command, options)

    • "n" β†’ Normal mode

    • "<Tab>" β†’ Keybinding

    • ":bnext<CR>" β†’ Command executed

    • { noremap = true, silent = true } β†’ Prevents recursive mapping and suppresses output This format is more efficient in Neovim and follows modern Lua-based configurations.

Would you like buffer closing improvements (e.g., bdelete vs bwipeout)? πŸš€

Replacing Words

You can achieve this functionality in Neovim/Vim by setting up a key mapping that:

  1. Selects the word under the cursor or allows you to visually select a word.

  2. Highlights all occurrences of the word in the document.

  3. Allows you to replace the word with an alternative easily.


πŸ”Ή Lua Key Mapping (for Neovim)

Add this to your init.lua (or keymaps.lua if you separate configs):

local keymap = vim.keymap.set local opts = { noremap = true, silent = true }  
-- Search and highlight all occurrences of the selected word 
keymap("n", "<Leader>h", ":%s/<C-r><C-w>//g<Left><Left>", opts)  
-- Same for visual mode (select a word, then press Leader-h) 
keymap("v", "<Leader>h", '"hy:%s/<C-r>h//g<Left><Left>', opts)  
-- Alternative: Use Ctrl-H instead of Leader-h 
keymap("n", "<C-h>", ":%s/<C-r><C-w>//g<Left><Left>", opts) 
keymap("v", "<C-h>", '"hy:%s/<C-r>h//g<Left><Left>', opts)`

πŸ”Ή Explanation

  • <C-r><C-w> β†’ Inserts the word under the cursor into the command line.

  • :%s/word//g β†’ Searches (s/) the entire file (%) for occurrences of word and prepares for replacement.

  • <Left><Left> β†’ Moves the cursor left twice so you can type the replacement word easily.

  • Visual mode (v):

    • h is used as a register to store the selected text ("hy).

    • The word is then inserted into the search pattern with <C-r>h.


πŸ”Ή How to Use

  1. Move the cursor to a word (or visually select a word).

  2. Press <Leader>h (or <C-h> if you prefer).

  3. All occurrences of the word will be highlighted.

  4. Type the replacement word and press <Enter>.

If you want to manually confirm each replacement instead of replacing all occurrences at once, you can use Vim’s interactive substitution mode with the c (confirm) flag.


πŸ”Ή Updated Key Mappings for Manual Confirmation

Modify your Neovim init.lua (or keymaps.lua file) to use c for confirming each replacement:

local keymap = vim.keymap.set local opts = { noremap = true, silent = true }  
-- Search and manually replace each instance of the word under the cursor 
keymap("n", "<Leader>h", ":%s/<C-r><C-w>//gc<Left><Left><Left>", opts)  
-- Same functionality for visual mode (select a word, then press Leader-h) 
keymap("v", "<Leader>h", '"hy:%s/<C-r>h//gc<Left><Left><Left>', opts)  
-- Alternative: Use Ctrl-H instead of Leader-h for manual replacements 
keymap("n", "<C-h>", ":%s/<C-r><C-w>//gc<Left><Left><Left>", opts) 
keymap("v", "<C-h>", '"hy:%s/<C-r>h//gc<Left><Left><Left>', opts)`

πŸ”Ή What’s Different?

  • Adding c in :%s/.../gc

    • This enables interactive replacement mode, so Vim will prompt you for each occurrence before replacing.


πŸ”Ή How It Works

  1. Move the cursor to a word (or visually select a word).

  2. Press <Leader>h> (or <C-h> if you prefer).

  3. Vim will highlight the first match and prompt:

    replace with (y/n/a/q/l/^E/^Y)?

    • y β†’ Replace this occurrence

    • n β†’ Skip this occurrence

    • a β†’ Replace all occurrences (without asking again)

    • q β†’ Quit replacement

    • l β†’ Replace this occurrence and quit afterward

    • <Ctrl-E> / <Ctrl-Y> β†’ Scroll the screen while deciding


PreviousLinuxNextVim

Last updated 3 months ago