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…)

4 points

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.

permalink
report
reply
2 points

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…

permalink
report
parent
reply
2 points
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.

permalink
report
parent
reply
1 point

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…)

permalink
report
parent
reply
2 points

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.

permalink
report
reply
2 points

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).

permalink
report
parent
reply
1 point
Deleted by creator
permalink
report
reply

Linux

!linux@lemmy.ml

Create post

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

  • Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
  • No misinformation
  • No NSFW content
  • No hate speech, bigotry, etc

Related Communities

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

Community stats

  • 8.4K

    Monthly active users

  • 6.3K

    Posts

  • 172K

    Comments