r_vim – Telegram
r_vim
71 subscribers
1.24K photos
52 videos
1 file
19.5K links
Download Telegram
Skill issue? or vscode better for this specific task

vim json macro: https://imgur.com/N9qSVob

vscode equivalent: https://imgur.com/VrM4hoQ

I love vim, been using it for about 6 months, my only real gripe is I always end up going back to vscode to do any kind of complex macro equivalent thing?


I can get it done in vim but the mental overhead is just... higher, and i end up attempting it like 3 times. Is this something that comes in time or is it just difficult. Opening vscode and doing it there is almost always quicker i've found.

https://redd.it/1ot9ll7
@r_vim
I made 🎰slot-machine.vim
https://redd.it/1ou1wer
@r_vim
A Python function I use to build project files from my Ultisnips snippets

I have a few noscripts I use for setting up projects different ways. This is the function I use to build project files from my Ultisnips snippets. Nothing ground breaking, but I've gotten a lot of use out of it.

import re
from pathlib import Path


def select_snippet(
snippet_file: Path, snippet_trigger: str, subs: dict[str, str] | None = None
) -> str:
"""Select a snippet file and fill in the template with substitutions.

:param snippet_file: Path to the file containing snippets.
:param snippet_trigger: The trigger for the snippet to select.
:param subs: Optional dictionary of substitutions to apply to the snippet.
:return: The formatted snippet as a string.
"""
pattern = re.compile(rf"snippet {snippet_trigger}(.*?)endsnippet", re.DOTALL)
with snippet_file.open() as f:
match = re.search(pattern, f.read())
if not match:
msg = f"Snippet {snippet_trigger} not found in {snippet_file}"
raise ValueError(msg)
match_str = "\n".join(match.group(1).split("\n")[1:])
for k, v in (subs or {}).items():
match_str = re.sub(k, v, match_str)
return match_str


# ===========================================================
# Example usage
# ===========================================================


SNIPPETS_DIR = Path.home() / "vimfiles" / "ultisnips"
PROJECT_ROOT = Path("to", "project", "root")


def write_pre_commit_config(python_min_version: str) -> None:
"""Write a pre-commit configuration file."""
yaml_snippets = SNIPPETS_DIR / "yaml.snippets"
subs = {r"\$1": python_min_version}
with (PROJECT_ROOT / ".pre-commit-config.yaml").open("w") as f:
_ = f.write(select_snippet(yaml_snippets, "pre-commit-config", subs))

https://redd.it/1ow5vr4
@r_vim
How many of those are default Vim bindings?

Been using Vim for not too long and still haven't memorised all the wonderful keybinds.

Just found out that TIC80's code editor has a Vim mode. Can someone more experienced in Vim than me take a look at this and tell me how many of them are default/common Vim binds, and how many are "close approximations" or "cursed" even?

Keep in mind this is a tiny fantasy console with a very simple editor. So, of course, its Vim mode is very minimal.

The main thing I can see is that due to lack of motions, some stuff in N mode, such as delete or yank, just operate on the full line immediately.

The keybinds in question:

Motion Keys

Work in both normal and select mode.
h - left one column
k - up one row
j - down one row
l - right one column
(arrow keys also work)

g - start of file
G - end of file

0,Home - start of line
$,End - end of line

ctrl+u,pageup - up one screen
ctrl+d,pagedown - down one screen
K - up half screen
J - down half screen

b - back one word
w - forward one word

^ - first non-whitespace character on line

{ - next empty line above current position
} - next empty line below current position

% - jump to matching delimiter

f - seek forward in line to next character typed
F - seek backward in line to next character typed

; - seek forward in line to next character under cursor
: - seek backwards in line to next character under cursor


Normal Mode

escape - exit editor to console

i - enter insert mode
a - move right one column and enter insert mode
o - insert a new line below current line and enter insert mode on that line
O - insert a new line above current line and enter insert mode on that line
space - create a new line under the current line
shift+space - create a new line above the current line
v - enter select mode (visual mode from vi)
/ - find
n - go to next occurance of found word
N - go to previous occurance of found word
# - go to next occurance of word under cursor
r - find and replace
u - undo
U - redo
p - paste, will place multi line blocks of code on line below
P - paste, will place multi line blocks of code above current line

1-9 - goto line, just type the line number and it will take you there

[ - go to function definition if it can be found
? - open code outline

m - mark current line
M - open bookmark list
, - goto previous bookmark
. - goto next bookmark

z - recenter screen

-(minus) - comment line
x - delete character under cursor
~ - toggle case of character under cursor

d - cut current line
y - copy current line

W - save project
R - run game

c - delete word under cursor and enter insert mode
if over a delimiter or quotation, delete contents contained and enter insert mode
C - delete until the end of the line and enter insert mode

> - indent line
< - dedent line

alt + f - toggle font size
alt + s - toggle font shadow


Select Mode

escape - switch to normal mode
-(minus) - comment block
y - copy block
d - cut block
p - paste over block
c - delete block and enter insert mode
> - indent block
< - dedent block
/ - find populating current selection
r - find and replace within block
~ - toggle case in block



https://redd.it/1owmv4o
@r_vim
Cyclops.vim - a new approach for creating dot (or pair ; ,) repeatable operators

This is an idea I had a few years ago to enable dot repeat functionality to existing operators without requiring plugin-side changes. Configuration is minimal, just one line to define a new map:

nmap <expr> / dot#Noremap('/')

Or if the map already exists, there is a helper function to redefine it:

call dot#SetMaps('nmap', 'a')

Unlike other plugins, there is no plugin-side changes needed, and it doesn't constantly record macros. It works on operators that require input, as well ones that don't.

Cyclops.vim works via a REPL pattern, the plugin concatenates a probe character to the end of the managed operator to detect if input is required, then stores the input for later use when repeating. It makes use of the operatorfunc to not collide with the built in dot repeat behavior.

Additionally, pair repeating with ; and , is also included. By default, f, F, t, T maps are provided to retain expected behavior. Pair repeating is configured similarly and uses the same machinery as dot repeating. Pair repeating does not impact dot repeating and vice versa.

cyclops.vim

https://redd.it/1oxxka3
@r_vim
I created my first colorscheme
https://redd.it/1oxywvy
@r_vim
I just want to use this old (bitmap?) font

I have this struggle with every modern IDE, text editor, etc. I'm in love with the old Courier font and how it was displayed on Windows 95/98/2k/XP, but I haven't been able to reproduce this style. It's not the font per se, it's not a Courier vs Courier New thing. I think it's because Courier in modern systems is rendered in a a different way.

Any one knows how to render it like in the old times? I'm using linux. Maybe some terminal emulator different than the ones provided in Mate or XFCE?

I'm talking about this:

Best programming font ever.

Nedit does font rendering the way I want. But it hasn't the Vim or Emacs movement so I feel like stuck in notepad.



https://redd.it/1oycbjo
@r_vim
How to display images in Vim while note-taking with vimwiki?

I'm currently trying to migrate from Obsidian to vimwiki in Vim (not Neovim) for note-taking. I'd prefer to stick with Vim rather than switching to Neovim if possible. I'd like to display images when navigating through links, but the markdown viewers I've tried don't seem well-suited for link navigation in vimwiki. Does anyone have suggestions for displaying images inline or alongside Vim while maintaining smooth wiki link navigation? I'm looking for something that works well with vimwiki's link-following workflow. Coming from Obsidian, I'm used to seeing images embedded in my notes, so I'm hoping to replicate some of that experience in Vim.

https://redd.it/1ozhw3y
@r_vim
github-actions.vim

Howdy r/vim

Wanted to share another pure vim9noscript plugin I'm working on to help with a regular part of my daily work: github-actions.vim

The plugin leverages `gh cli` to let you list Workflows, workflow run details, open workflow files / view the details on GitHub.

# Why I built it

I've been pairing with DevOps folks in my org and was pretty impressed by the VSCode GitHub Actions extension. Rather than opening the IDE I decided it would be easy enough to port the functionality into vim and save my sanity

# Screenshot + Quick Demo

(https://preview.redd.it/pp8uwdad3r1g1.png?width=1283&format=png&auto=webp&s=5b4f2f4dbae0c1645f82566eb42b60d7d8388330)

https://preview.redd.it/gzyz2g136r1g1.png?width=1291&format=png&auto=webp&s=3641192ec7bfc58dd824d7bed23ae19c78c5d058

# Current Status

v1.0.0 release is in a good place but there are a few more features I'd like to add here soon (last actions in current branch, delete workflow definitions).

I'd love any feedback / questions / feature suggestions you might have.

Repo: https://github.com/DanBradbury/github-actions.vim

https://redd.it/1oz81oh
@r_vim
Repeat last command in terminal buffer

Hey!

I have been using terminal buffers for a while now to mostly compile and execute applications. I have been told Im a disgrace to the Unix world for not using Ctrl-Z and fg, but I prefer seeing what tests failed/where my compile time errors are.

Since I'm usually using multiple buffers at once, navigating to the terminal is often slow. My solution was using tabs for a while but in all honesty, I do not think that this is the real solution for that. So I wonder how one could execute the last command entered in the terminal or even better, even search the last commands of the terminal. I usually have one terminal buffer open, but one could make it more generic and say that execute the last command in the last used terminal buffer.

Is there a native way of doing this? Or do I have to do some trickery with Lua/Vimnoscript?

Cheers

https://redd.it/1p06i05
@r_vim
Section movement ( ]] & [ ) does not count

I open a markdown file that looks like this:

> # HEADING 1
body text
# HEADING 2
body text
body text
# HEADING 3
body text
# HEADING 4
body text
body text

My cursor is at HEADING 1, and i enter `3]. Now my cursor is at HEADING 2. Shouldn't it be at HEADING 4? Similarly, if my cursor is at HEADING 4 and i enter 2[`, i expect it to be at HEADING 2, but it ends up at HEADING 3. Do `] and [` only count under certain conditions?

I don't totally understand exclusive or exclusive-linewise motion but it doesn't seem to have anything to do with what I'm asking. I'm thinking this is something i have to configure myself but i feel like i'm missing something obvious.

[https://redd.it/1p0aqyz

@r_vim