14 ms·
My favorite Vim oneliners for text manipulation
- jacobgorm 3y agoSelect a block of text with V, press colon and then type: s/^$/printf("@%d\\n", __LINE__); To place a line printf on every empty line in the program, to quickly find out where your code crashes on the next run. Obviates most of my need for external debuggers, and works over serial lines etc where setting up a debugger is going to be a hassle or simply not possible.
- triztian 3y agoThis is pretty cool! would you mind sharing the command to remove it too?
- a_subsystem 3y agou
- nequo 3y ago:%s/^printf("@%d\\n", __LINE__);$//
- triztian 3y agoThank you!
- gcr 3y agoWouldn’t this prevent the code from running? It’s just moved into the string literal. Would this be better? s/^$/printf("@%d\\n", __LINE__);@
- king_geedorah 3y agoNo, yours replaces empty lines with 'printf("@%d\n", __LINE);@'. The GP replaces empty lines with 'printf("@%d\n", __LINE__);' The replacement doesn't wrap any code. It annotates that certain points in the source have been reached at runtime. Yours wouldn't compile, which seriously limits its usefulness.
- gcr 3y agoAh, I misinterpreted. The trick only replaces blank lines, I thought it would work on any line because I thought that `@` was a special output token that would cause vim to insert a copy of the matched input. It isn't.
- gcr 3y agoDigging into this a bit, here's the command I thought I wanted: :s/.*/printf("& -- %d\\n", __LINE__); & This only works on lines that don't have string literals and behaves badly on lines that span block boundaries. I had confused @ and &
- king_geedorah 3y agoMakes sense. I suppose one could also use a debug macro that stringifies the statement to avoid the problems you described. Might be something like: #define DEBUG_PRINT(stmt) printf(#stmt“ — %d\n”, __LINE__) Then your replacement could be something like: s/.*/DEBUG_PRINT(&); &; Which would print out the statement being executed and the line it is at in the program. Also you’ll want :%s instead of :s, as the latter will only replace on the line on which the cursor is positioned. Come to think of it, you’ll probably not want this to happen on lines which are themselves preprocessor directives or those with comments, function signatures, or (exclusively) punctuation like with braces. All this to say, I’m sure it could be done, but it gets into the weeds very quickly.
- syockit 3y agoThis requires that you put have lines between major pieces of codes. Which I think is a good habit to have anyway. Some people use comments without preceding empty lines (oh why) to delineate code, so they'd have to change the regex a bit to make this work.
- tyingq 3y ago%s/ \s\+$// comes up for me a fair amount (trim trailing whitespace)
- nerdponx 3y agocommand! StripTrailingWhitespace %s/\s\+$// I'm more inclined to use it on a regular basis when it has a friendly name, even though I'm pretty handy with regex.
- 000ooo000 3y agoI do the same. For Neovim users, Command Center is a neat customisable command palette (e.g. from VsCode) menu, but there's a few around. I typically create a command but also add it to command center, whose open mapping I have set to shift+enter. You can then fuzzy find command names/content which helps for those commands you don't use all that often.
- arp242 3y agoIf you wrap it in a function it wont clobber the last search pattern, and use winsaveview()/winrestview() to not move the cursor/view around. fun! TrimWhitespace() let l:save = winsaveview() keeppatterns %s/\s\+$//e call winrestview(l:save) endfun command! TrimWhitespace call TrimWhitespace() Little bit more, but not too much and gives a much nicer experience IMHO.
- Zardoz84 3y agooh, nice improvement!
- Zardoz84 3y agoI like to use a shortcut for that : nnoremap <silent> <Leader>tl :let _s=@/<Bar>:%s/\s\+$//e<Bar>:let @/=_s<Bar>:nohl<CR>
- cyphar 3y agoI have these in my .vimrc, to display and auto-trim trailing whitespace: augroup trailing_whitespace_show autocmd! " Make trailing whitespace red. autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red autocmd BufWinEnter,InsertEnter,InsertLeave * match ExtraWhitespace /\s\+$/ " Can slow things down, but show trailing whitespace as red while typing. autocmd InsertCharPre * match ExtraWhitespace /\s\+$/ augroup END augroup trailing_whitespace_kill autocmd! " Delete all trailing whitespace on-save. autocmd FileWritePre,FileAppendPre,FilterWritePre,BufWritePre * \ let w:wv = winsaveview() | \ :%s/\s\+$//e | \ call winrestview(w:wv) augroup END
- kagevf 3y agoI like using `q:` to get at the command history, and recently I realized `ctrl-w _` also works there to get a nearly full screen view of the history!
- 000ooo000 3y agoLesson two after learning how to quit vim should be that q: opens command history. If I had a dollar for every time that window opened and left me wondering 'wtf, quit damnit', I'd have at least 12 dollars.
- arp242 3y agoMy vimrc has: # Bloody annoying. nnoremap q: :q
- zeroonetwothree 3y agoNo vim thread is complete without a discussion of how it’s hard to quit.
- extragood 3y agoI'm starting to think that many of us who are so fond of vim are simply experiencing the effects of Stockholm syndrome
- schaefer 3y agoin command mode: gqq Reformats the current long line into a paragraph of the specified width. If a word overruns the column width limit, the entire word is moved to the next line.
- wilkystyle 3y agoAlso useful: gw is like gq but leaves the cursor where it is.
- 000ooo000 3y agoAwesome, thank you. I'm forever manually adjusting block comments to be a sensible width so this will help. Probably asking a bit much but do you know if there's a command that can operate on a visual line selection and do the same? e.g. I come across a block comment, add to it, then want to re-width it. Worst case, I guess I could create a command to collapse the lines first then run gqq.
- nerdponx 3y agoThe command you want is just gq. In normal mode it accepts a motion, eg gqip or gq}. And it works in visual mode as well. The gqq command is a special case for the current line. Personally I use https://github.com/kana/vim-textobj-line https://github.com/kana/vim-textobj-line which defines a text object for the current line and maps it to _, so gq_ also formats the current line. See here for relevant documentation: https://neovim.io/doc/user/change.html#formatting https://neovim.io/doc/user/change.html#formatting
- AdmiralAsshat 3y ago> :g/^\s*$/d I believe I've used a similar 'delete empty lines command' in the past, but it was just: :g/^$/d Can someone explain what the OP's regex is doing differently?
- wilkystyle 3y agoYour version deletes empty lines, but the version you quoted deletes lines that are blank or only have white space. Edit to be more helpful: ^ is the start of a line \s is a space character * means "zero or more of the previous character" $ is the end of a line
- AdmiralAsshat 3y agoGot it. He specifically said, "Remove all blank lines", so I assumed they were doing the same thing. I should've recognized \s as the space character.
- tzot 3y ago> I should've recognized \s as the space character. … whitespace pattern.
- deleted 3y ago[deleted]
- MrVandemar 3y agoHere's my favourite: vi" If your cursor is within two quotes on a line, it will select everything inside those quotes to (c)hange, (y)ank or (d)elete or whatever you want. Great if you're the sort of person who writes HTML by hand all the time.
- KRAKRISMOTT 3y agoThe v is redundant unless you want highlighting. You can do yi" directly (or ci" or di"). For more fun, activate vim-surround. E.g. to replace surrounding quotes with parentheses: cs"(
- riffraff 3y agoit's fun, I have had vim-surround installed for years but keep forgetting how that it exists.
- TonyStr 3y agovi"p or vi"P is a great way to overwrite "" contents with the contents of your unnamed register
- Izkata 3y agoI habitually use visual mode for a lot of stuff like that so quick flash shows me what was affected (in case of typo). If the highlighted part isn't what I expected I instantly know to undo, rather than having to think about the resulting text for a moment.
- williamdclt 3y agoSame. Which shows a weakness of vim, I think it’d be much more usable if it had the verb last: iw would select the word then you can delete, yank, or even extend the selection knowing exactly what you’re going to operate on. I think kakoune works like that, but I don’t have the will to learn another editor and vi is what’s available everywhere anyway
- 3y ago
- eviks 3y agoIt's not a sign of "unparalleled efficiency" having to type these little monstrosities by hand, let alone frequently :g/\(\d\{1,3}\.\)\{3}\d\{1,3\}/y A Is there a way to type "ip" and select from a helper list with regex and description sorted by frecency?
- 000ooo000 3y agoNot an answer to your question, but FYI, command history (q:) might be useful for you if you hadn't come across it yet.
- nerdponx 3y agoYes, you can define your own commands to do whatever you want. For things like fuzzy search and frecency sorting, there are a handful of plug-ins and frameworks that can help, including an FZF interface and a few other Vim/Neovim-specific plugins like Telescope and Denite.
- danielvaughn 3y agoThat was my first thought when I saw these. I’ve been interested in learning Vim but these look like hell to type.
- atorodius 3y agoYou don’t need these. I‘ve been viming for 10+ y and just using the normal shortcuts and ways of manipulating text is a major productivity gain.
- imbnwa 3y agoVim regex engine descends from vi and ed, which predate Perl Compatible Regular Expressions, whose derivative forms we're all familiar with
- danielvaughn 3y agoYep I'm familiar with regular expressions, but I don't typically use them as a command prompt.
- agileAlligator 3y ago> simple vim one liner which allows you to count the words in the file > :%s/\w\+/\=submatch(0)+1/g | echo line('$') Yeah, no. Isn't there a plugin to just display word count in the corner somewhere automatically?
- hyperhopper 3y agoI never want to know the count of words once. If relevant, I want to _always_ see the count.
- blueside 3y ago`g ctrl-g` will do it, but i can barely remember that, so i end up doing `!wc %`
- zaphod420 3y agoLOL. "simple". I really want to learn vim and be really good at it. I keep trying different tutorials, and I'm starting to be more comfortable with it, but I just keep using sublime text as my main editing tool because it's just easier.
- linhns 3y agoYep. I love vim but for big projects I have to use VSCode as I need the extensions.
- tyingq 3y agoAlso handy is this to run the current buffer through an external command: %! somecommand So, for example, using perl to make everything uppercase: %! perl -pe '$_=uc'
- fuzztester 3y agoFor programming in languages where indentation means a nested block: >> and << indent the current line right and left by one indent position respectively, typically a tab or 4 spaces, though I need to check whether it works for spaces. Prefixing those with a number n will indent n lines, starting with the current one.
- tremon 3y agoThis works in all filetypes, and the indentation amount is set by shiftwidth. Whether tabs or spaces are inserted is controlled by expandtab (for spaces) or noexpandtab (use tabs). You can use any navigation command as the target, I find myself often using >} to indent every line until the end of the block.
- cerved 3y agoor >ap
- fuzztester 3y ago>You can use any navigation command as the target, I find myself often using > >} >to indent every line until the end of the block. Yes, that's a good one for code in languages where } marks the end of a block, such as C, C++, Java, etc. I also use >G to indent from current line to end of file in a text file, or 1G>G which is 1G to go to line 1, and then >G to indent to end of file, which indents the whole file, which can be useful for printing on paper, more so when combined with other options like shiftwidth, !fmt, etc. (also mentioned in this thread). And many other such combinations of the indent operation and some movement, for structuring text or code, are possible. All such combinations are based on the same principles mentioned in the Stack Overflow "grok vi" comment that I posted about in this thread: https://news.ycombinator.com/item?id=37018215 https://news.ycombinator.com/item?id=37018215
- spoonfeeder006 3y ago> A simple vim one liner... > :%s/\w\+/\=submatch(0)+1/g | echo line('$') Uh, thats..... simple???
- deleted 3y ago[deleted]
- Izkata 3y agoCheck out the comments on that page, someone else had a similar response and pointed out this feature is built-in to vim.
- fuzztester 3y agoA classic: "Your problem with vim is that you don't grok vi:" https://news.ycombinator.com/item?id=2911930 https://news.ycombinator.com/item?id=2911930
- scop 3y agoOne of the beautiful things about vim is that they have multiple ways to skin the cat and, as such, you develop your own mode of using it. For example to navigate within a single line you can: - f[character] (jump to character) - w/e (jump word by word) - A (jump to end, navigate from there) - / (search!) - h/l (move left/right) - even more ways! What’s funny is that, theoretically, some of these movements are more “efficient”, for example jumping to a specific character is a lot faster than going character by character. However, I found that I often go character by character or searching instead of f[] just because my brain finds it easier to move that way than to think “what character is that”. I use massive jumps when finding a line; but once on that line, I use very slow movements. Now, it’s totally less efficient, but it’s how my brain/fingers navigate most naturally even after repeated attempts at to train myself to use “better” methods. Perhaps my habits will change over time, but regardless it is remarkable how “personal” vim can be. Thank you Bram! (Edited to fix list format)
- ansible 3y agoI would advise anyone who wants to master VIM (and NeoVIM) to get used to all the different ways to move through a document. Here's a good wallpaper about that: https://www.rosipov.com/blog/vim-movement-cheatsheet/ https://www.rosipov.com/blog/vim-movement-cheatsheet/ Ever now, after decades of use, I try to incorporate the most efficient methods of moving around the document and around the screen. Sometimes, when I've just held down movement keys (such as 'hjkl') to get to a specific location, I'll go back to where I was and, for example, use the find character command instead as practice.
- kagevf 3y agoNeat! I didn't know # was "backwards" *
- zeroimpl 3y agoOddly I often navigate in a line by typing “f “ (f space) then press . repeatedly until I’ve gotten to the right place. Never occurred to me to navigate within a line using / but that ought to be faster most of the time
- drtz 3y agoI once did a lunch and learn at work where I tried to teach coworkers how to use vim efficiently. It turned out to be the absolute worst lunch and learn I ever did. It's just so unintuitive and trying to teach it in a "here are some good shortcuts that will save you time" way was a near-total waste. vim is the closest any editor comes to interfacing directly with my brain. Once you learn to make your neurons fire in the right way to move the cursor to the right spot, it's easy and there's no better way to edit code. Describing the neuron firing order to someone else, though, is futile. It's like learning to to use your fingers to pick something up for the first time as a kid: you just have to try enough times until it sticks.
- arcanemachiner 3y ago> vim is the closest any editor comes to interfacing directly with my brain. It's funny you mention that. Just today, I had this moment where I realized that if someone asked me which key letters are used to move up/down/left/right, I'd have to pause and think about it. I've been using Vim for years. Like, my index finger rests on the down key, so J is down. I think? And so on... My middle finger rests on the up key, so K goes up? Do I actually have to move my index finger to go left? What is my pinky doing most of the time? It's just funny how all this stuff is burned into my brain but I wouldn't even be able to tell someone the basics without a keyboard in front of me.
- tylerhou 3y agoj goes down because it looks like a down arrow.
- jolmg 3y agohttps://en.wikipedia.org/wiki/ADM-3A#Legacy https://en.wikipedia.org/wiki/ADM-3A#Legacy > The use of the HJKL keys for moving the cursor in the vi editor and its descendants originated from the ADM-3A [...] The ←, ↓, ↑, → and Home labels printed on the H, J, K, L, and ~ ^ keys were a visual reference to the control characters Ctrl+H, Ctrl+J, Ctrl+K, Ctrl+L, and Ctrl+~ ^ that were required to move the cursor left, down, up, right, and to the top/left corner (or "Home" position) of the terminal, respectively [...] The Ctrl+H and Ctrl+J functions were the standard ASCII backspace and line feed respectively, but the interpretations of Ctrl+K, Ctrl+L, and Ctrl+~ ^ were new to the ADM-3A. Seems almost a happy accident. I personally like the placement because the most common movement in a document is down and it's placed right under the most dextrous finger, the index finger, by a coincidence between ASCII encoding and the QWERTY layout. Up being the second most common movement was put under the second most dextrous finger. Nice.
- cycomanic 3y agoIm confused by the first one, what's wrong with g CTRL-g?
- Aperocky 3y agoShouldn't these condensed in the vimrc with a suitable shortcut to avoid needing to remember regex like strings?
- cerved 3y agoYou can but I would mostly use that as a reference. It's not as much about memorizing strings as it's learning a new language.
- Lio 3y agoI guess it depends. There's almost always multiple ways to do anything in Vim and pros and cons to each. Using a mapping will save you time if you use the same regex often but you can end up having to remember a lot of shortcuts. I find I forget rarely used mappings. If you learn the Vim command line and regex well it can be quicker to just type what you want on demand and then use one of the methods repeating it. Then forget about it till the next time you need it. It's also helpful if you have to use configured Vim occasionally.
- user3939382 3y agoI tried to switch to it as my PHP IDE from PhpStorm, replicating each feature with config and plugins. Finally I realized I couldn’t get EA Inspections working in vim, the interface just doesn’t exist. JetBrains has a new CI tool for their inspections so that may provide a way with enough effort.
- mr_o47 3y agoHello HN, I'm the author of this post, and I hope you enjoyed reading it. I wanted to share this one-liner for fun: :%s/\w\+/\=submatch(0)+1/g | echo line('$') Although I know there are more efficient ways to count words in a file using Vim, I wanted to be a little creative. Lastly, I want to express my deep sadness over the passing of Bram Moolenaar. He created an extraordinary text editor that had a profound impact. Rest in Peace Bram Moolenaar
- function_seven 3y agoI also snarked a bit when I saw your word count example, but immediately reversed course when I saw the JSON formatting one-liner. I will use this. I will use the hell out of it. Thanks! RIP Bram.
- TonyStr 3y agoWhat does `%!python -m json.tool` offer that `%!jq` doesn't?
- function_seven 3y agoI don’t know. I’m assuming I should install jq (or see if I already have it?) Here’s the problem I have: I don’t often have to format unformatted JSON, but when I do, it’s almost always an error message I’m trying to parse in order to track down a bug. So I tell myself “I should really figure out how to automate this…I know it’s obviously possible, but I just really wanna fix this bug right now, so I’ll do that later.” And then the next time it happens, I curse myself for not having researched that, and promise to do it before the next time. So I’m just happy that I stumbled across this page. Now I don’t have to remember to research it :)
- cerved 3y agoChances are higher that python is installed than jq, other than that can't think of any
- ChuckMcM 3y agoMy favorite one liner is :!}fmt which on Linux and UNIX systems runs from where the cursor is, through to the end of the paragraph though the fmt(1) command (which wraps words etc.) When I edit a file that has no line endings this can create a readable document for me.
- augusto-moura 3y agoYou can do that by setting textwidth to a value, say "set textwidth=80", and hitting the "gq" action. So to format the current paragraph something like "gq}" would do the same as your snippet
- shiomiru 3y agoI like fmt better because it works on all vi's. It's also closer to the UNIX philosophy of doing one thing and doing it well. Also, it's not just fmt you can use. Want to sort a paragraph of lines? !}sort^M and you're done. Or reverse sort till the end of the file with !Gsort -r^M etc. Really, all UNIX commands are integrated into your editor, and that's the beauty of it.
- cerved 3y agoI didn't know you could use motions like that! <3
- fuzztester 3y ago>Or reverse sort till the end of the file with !Gsort -r^M etc. Right. Or flip the case of a section of text, even of an arbitrary block of lines demarcated by marks set by vi(m) commands like ma and mb and the like, by filtering it through tr. Or filter another section through sed or awk or even through a Unix pipeline, to do whatever you want. And with just a little practice, you can become fluent and fast with all of this, and it improves your productivity a lot, apart from being fun and creative.
- xigoi 3y agoI prefer soft wrapping, since it doesn't force your choice of line width on other people. :h 'wrap'
- jiannengli 3y agoVim's primitives are quite powerful for digging through logs too. Here are some of my favorite one-liners: https://swordandsignals.com/2021/01/10/vim-read-logs.html https://swordandsignals.com/2021/01/10/vim-read-logs.html
- IshKebab 3y agoPretty sure I could do all of these easier in VSCode, except.maybe adding up all the numbers in a file.
- thepostman0 3y agoNot everyone wants to edit in a browser, maybe many people can't due to their computers spec.
- IshKebab 3y agoVSCode runs a desktop app as well as in a browser. You knew that though. And I use VSCode on a 10 year old desktop. VSCode itself is very light. It's the extensions that sometimes have performance issues. Microsoft's C++ one is by far the worst offender.
- kzrdude 3y agoAs (neo)vim user, this article is quite low on the tier list for useful information about vim IMO. I appreciate the vim discussion here but not much more to gain from this posting unfortunately.
- Zardoz84 3y agoMy little one liners : removing trailing spaces : :%s/\s+$//e replacing tabs for spaces : :%s/\t/ /g
- ozim 3y agoWeird because most of it is just regex not vim. Running python tool from inside of vim also doesn’t feel like “vim one liner”.
- berkes 3y agoBut the whole idea of vim, is that it leverages other tools. So in that sense calling python is very much a "vim one liner".
- ozim 3y agoLets rewrite what I have issue with in clear text: Farming "up-votes/blog impressions" because VIM creator died seems off putting. Putting VIM in that blog post is unnecessary and I do believe it was posted with bad intentions. I don't believe article would land on main page if it would not have VIM and it would be only about text editing one liners. Especially when those one liners are not amusing.
- me-vs-cat 3y agoWhile I fully agree, I multiply that by the value they get from these upvotes and impressions to get a solid, "meh".
- Lio 3y agoVim oneliners are useful thing to know even when Vim provides other ways to achieve the same thing. e.g. g ctrl-g for word count. What's useful about learning and thinking about Vim's command line is the overlap with tools such as sed, which also descends from the ed command. Being about to use sed is REALLY useful even if it's just for simple Unix pipelines like renaming multiple files or branches in git.
- aulin 3y agoPretty confused about this post and comments. Seems everyone is just using custom regexps or piping buffers to external commands. That's how I as an emacs user occasionally use vim. And that's because I don't know vim at all and this way I can work around my ignorance. I refuse to believe vim power users use it like this.
- kzrdude 3y agoIt's one aspect of using vim, to use the s or g commands efficiently IMO. But it's not as important as using the regular command + movement vim language stuff.
- williamdclt 3y agoI never pipe buffers, but I do use sed regex replacement pretty often. Like many other vim aspects I always feel it’s clunky though: vim is a _text_ editor when I want it to be a _code_ editor. I don’t operate on paragraphs or regular expressions, I operate on functions and identifiers and imports.
- tmalsburg2 3y agoI don’t think that this list is supposed to be an accurate representation of how people typically use vim. More likely this list was compiled precisely because these uses are somewhat non-standard / non-obvious and therefore worth sharing. Having said that, I do believe that using external tools is much more idiomatic for Vim than Emacs.
- mvanbaak 3y ago> :g/\(\d\{1,3}\.\)\{3}\d\{1,3\}/y A This is IPv4 only. Have one for v6 as well?
- beaugunderson 3y agoBecause empty octets of an IPv6 address can be elided (1:0:0:0:0:0:0:2 can be represented as 1::2) the regular expressions are actually quite painful. I wrote a library for JavaScript called `ip-address` that can generate regular expressions to find all forms of a specific address. Here's the regular expression for all forms of 1::2: /(?=^|[^A-Fa-f0-9:]|[^\w\:])((0{0,3}1):(|(:0{1,4}){1,5}|(0{1,4}:){1,5}|(0{1,4}:){5}0{1,4}|(0{1,4}:){1}:(0{1,4}:){3}0{1,4}|(0{1,4}:){2}:(0{1,4}:){2}0{1,4}|(0{1,4}:){3}:(0{1,4}:){1}0{1,4}|(0{1,4}:){4}:(0{1,4}:){0}0{1,4}|(0{1,4}:){1}:(0{1,4}:){2}0{1,4}|(0{1,4}:){2}:(0{1,4}:){1}0{1,4}|(0{1,4}:){3}:(0{1,4}:){0}0{1,4}|(0{1,4}:){1}:(0{1,4}:){1}0{1,4}|(0{1,4}:){2}:(0{1,4}:){0}0{1,4}|(0{1,4}:){1}:(0{1,4}:){0}0{1,4}):(0{0,3}2))(?=[^\w\:]|[^A-Fa-f0-9:]|$)/i
- teo_zero 3y agoI don't understand the first one: :%s/\w\+/\=submatch(0)+1/g | echo line('$') It doesn't seem to work -- except it says "xxx substitutions", so you can assume it found exactly xxx words. Besides, it changes the original text so you need to undo. Lastly, why is it so complicated? What is the purpose of submatch()? And why echoing the number of the last line?
- ConorSheehan1 3y agoI also thought this one was weird. I'd just use wc.
- palata 3y agoOr in vim, do `g ctrl+g`.
- kzrdude 3y agoOne of the innovations in the Vim space that I've appreciated a lot is which-key by folke for Neovim: https://github.com/folke/which-key.nvim https://github.com/folke/which-key.nvim It makes keybindings in vim discoverable, it's quite magical. For example, press g and get a table of all the various commands that follow from there. Press mapleader and get a table of various commands from there, etc. Edit: On closer look, I've learned that maybe vim-which-key came before that, and guide-key before that etc, there's a long lineage of this too!
- maccard 3y agoThe comments in this post remind me why I use an IDE. Breakpoints, debuggers, auto formatting aren't things I make decisions on every day, they're just built into the tool I use. (I recently moved from visual studio to intellij and friends, and the biggest feature I miss are https://learn.microsoft.com/en-us/visualstudio/debugger/using-tracepoints?view=vs-2022 https://learn.microsoft.com/en-us/visualstudio/debugger/usin... tracepoints. They're like runtime configured logging for compiled languages) That said, I do use vi bindings for navigation. Stuff like "replace all instances of X with Y" are semantic, and my editor handles them for me. Doing "insert at the end of this quoted string is something I _do_ use. I have gripes with Vi's defaults (hjkl shouldn't be the default because the author had a keyboard with those defaults half a century ago), but overall it's an improvement on arrow keys and a mouse. The best comparison to me is it's like touch typing Vs hunt and peck typing for text editing. I'm not wildly more productive because I can use a handful of shortcuts, but it does remove friction. What I do want is semantic vim. I spend my day writing code, and despite the fact that I edit text I think in semantics. No, I probably don't care what the next word is, and I don't care to guess how vim is going to interpret `w` when I give it: macro_rules! foo { ($l:tt) => { bar!($l); } } macro_rules! bar { (3) => {} } foo!(3); What I really want is something that interacts with tree sitter (or the likes) and navigates my code. I want to delete this current block, or this function. I want to jump to the next argument, not the comma in a hard coded string. I want change the last argument of this function, not up until the closing bracket of the first function call in foo(bar(), baz(), 3);
- matwood 3y agoSame. In just Intellij and VSCode with vi bindings and rarely use vi/vim unless I'm on the server or doing something quick at he CLI.
- maccard 3y agoAll our apps are containers, so being on the server is a rarity. Quick CLI edits, I use vscode for these days (but am investigating switching to fleet as per the last time it came up here!)
- 3y ago
- paulsutter 3y agovi and vim are atrociously bad. y’all got stockholm syndrome vim may be 10% less awful, but it’s still garbage > When using Vi in insert mode, you cannot move around without first hitting Esc then again i or a. Vim fixes this by allowing you to use the arrow keys to move around in a file while in insert mode.
- chrysoprace 3y agoSounds like vim isn't for you. Speaking for myself, my reason for using vim is to keep my hands on the keyboard and reduce mouse usage. The other benefit is that I can stay in the terminal instead of having to switch to a GUI editor. If those benefits don't sound enticing, then I could how it might seem unappealing.
- meindnoch 3y ago:%!python -m json.tool I prefer :%!jq .
- gsuuon 3y agoThis is a neat one-liner if you don't want to install vim-fugitive on a temporary machine just for 'Gvdiff': set diff crb | vnew | exec "r !git show HEAD:#" | set diff crb Shows git diff with head - modify git show command to taste.