this post was submitted on 13 Feb 2024
14 points (81.8% liked)

Linux

48215 readers
642 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

Hi there - I'm trying to dive into neovim and I can't figure out how to do a certain thing in visual block mode...

Is there a way to extend a cursor/block column down from a long line through a series of shorter lines such that the short lines extend to meet the cursor (thus letting you enter text all in a column)? All I can seem to get it to do is have the cursor go to the end of each line, leaving a set of entry points staggered over a different column positions.

I think the feature I want is called Virtual Space, but I'm not sure. I am sure, however, that I use this feature extensively in Ultra Edit and Notepad++ (and mssql mgmt studio and visual studio but not vscode!)

Is there an add on? A plugin? (bonus points if the entry points remain highlighted once going into insert mode after the block is selected?) I've seen suggestions to try using the 'virtualedit' setting, but unfortunately, this doesn't seem to solve the issue. It only adds text to lines that are already of length greater or equal to the column position of the block selection. Unless I'm missing something.

(Adding a link to a vscode issue begging for the same feature. It might help illustrate the concept. - https://github.com/microsoft/vscode/issues/13960 )

Would be grateful for help here. (bonus points is there's a way to keep the cursor highlighted after the shift to insert mode...)

all 7 comments
sorted by: hot top controversial new old
[–] [email protected] 4 points 9 months ago (1 children)

I do not think that this is an existing feature in neovim, however this seems to work :%s/\(.*\)\zs\s*$/\=repeat(' ', 15 - len(submatch(1)))

Change 15 to the column desired. You could probably create a function where you pass the column number you want so that you dont have to type this string all the time.

[–] [email protected] 2 points 9 months ago (1 children)

Thank you for the response. I'm not sure I'd have any idea how to create a function for this at this point. Lack of support for this feature is pretty much the main reason I'm shifting away from vscode. (Also looking at nvim as I want a more powerful go-to solution for CLI editing...)

Certainly frustrating - it was my most used feature when I was coding SQL extensively...

[–] [email protected] 2 points 9 months ago (1 children)
command! -range -nargs=1 PadColumns call PadColumns(<line1>, <line2>, <args>)

function! PadColumns(start, end, columns)
    execute a:start.','.a:end.'s/\(.*\)\zs\s*$/\='.'repeat(" ", a:columns - len(submatch(1)))'
endfunction

Use by typing in Normal mode :PadColumns 20. This will add spaces after the line or selected lines to the column you specify (in this case, 20).

You could probably improve this by getting the length of the longest line and so you dont need to specify the specific column to add spaces to (20), and instead just add say 5 spaces after longest line for all lines.

[–] [email protected] 1 points 9 months ago

It would be faster to just select every end of line and add spaces and then do the edit & Trim later.

Bottom line is that the functionality doesn't seem to exist in any useful way. Wish it did. I think Ultra Edit, notepad++ visualstudio and mssql mgnt studio must have spoiled me for other editors (in this respect). Even Geany does this (but oh, so janky...)

[–] [email protected] 2 points 9 months ago (1 children)

Not sure if I totally grok what you're asking but try Ctrl+v to enter visual block mode or whatever it's called, navigate down to the line you want to go through, hit Shift+I, type in your junk, then hit escape.

[–] [email protected] 2 points 9 months ago

Unfortunately, that will just skip over the short lines contained within the the block selection, which is exactly what I'm trying not to do (hence the initial question).