The tool I'm using to show the keystrokes isn't the best - sorry about that. I'll look into other options for my next video. If you have any recommendations for a better one, please let me know!
Usually when I watch these videos I tend to see the same tips over and over, that seem more tailored to absolute beginners than frequent vim users. Not this one though, this was great and concise and taught me a few things I did not know. Thank you!
Thank you so much! I'm really glad to hear that the video brought something new to the table for you. Appreciate your kind words and thanks for watching!
Count me in too! Even if a vid shows me something I know, it's validating because the vimJourney is so personal that we get stuck using something just because we didn't know of another way. I learned a few new things here and my usage of Shift+J has been validated.
vim motions are easier if you translate them in your head, e.g for vib you should say it befor typing the motions.. copy inside brackets (v i b) , copy inside function (v i f), change inside quotes (c i ' ) ..etc. The motions are limited to your imagination
Been using vim for 3 years and still this video taught me things that I think would've taken me another year to find if I hadn't seen this video. Thanks a lot for vib and viB that's so fast
@@henrymisc Okay guy this gives me hope, I'm only a few months in my vim journey and I already knew 90% of what it presented here. the i+b and g+x are the only two I learned. @henrymisc is is a great video though
yeah this one is cool. I had just started getting better at targeting the {, [ and ( keys on my keyboard and that will still come in handy when there are lines with different types of parentheses on them, but for all other ones I'm happy to use b and B :)
Just found out the line joining feature has an advantage beyond what you've shown. When combining two lines that included indent spaces, I always got frustrated because I had to delete the spaces. You can't imagine how I felt when I saw that just pressing the J key automatically removed the spaces and combined the lines simply and neatly. Thank you.
Thank you! Sessions were completely new to me. I will try to write something that autosaves the current session from time to time and restores it automatically if the file exists. That would be such a lifesaver
Thanks so much! Someone on reddit pointed out that there's also a plugin called vim-obsession, which offers a nicer interface for managing sessions, if you're interested in a pre-built solution.
Omg, i used neovim for 2 years and i knew only 2 of the tricks lol I love how i still can keep going down VEEERY deep rabbit hole in neovim/vim even after feeling like i learnt everything lol
I noticed you use enter for a new line in insert mode. However, reaching for Enter is painful for your pinky. I use for the new line in insert mode, along with instead of backspace and for deleting the word to to the left. When I learned that I can do that instead of reaching for Enter or Backspace, I felt such a relief. No more pain
@@sergeykolesnik1171 That's pretty smart! Is this default behavior or a custom keymap that you set up? I use a split keyboard with enter mapped to my thumb keys though, so for me this is quite comfortable actually :)
nice content. 2 cents from me. C-Z /fg is actually not Vim function. It’s a Linux feature applied to all cli app. You can also type :terminal to have a seperate cmd window. Also, the gx is actually the netrw key mapping, it’s vim defalut folder/file manager . But it’s OK to assume it’s part of the vim . Thanks very much for sharing . Keep it coming ❤
Man usages of visual block surprised me. Those use cases I absolutely would’ve just done a quick macro on the fly, but in that case visual block is definitely way faster! Big fan
Neovim is just amazing, I've been using it for a little while longer, but I still use almost the bare minimum of basics, but it is still enough to make text editing so much easier and more comfortable.
@@Flackon To add to that, if you have multiple jobs running in the background, you can check their status with jobs and bring a specific job to the foreground using fg %. For example, fg %2 will bring the second job back. Thought you’d find this tip handy as well! :)
I think that the most useful thing I learned in recent years is: ":norm! ". You can select multiple lines and call a sequence of key strokes on each one. Example: select in visual mode a few lines and type: ":norm! 0wiprefix " or ":norm! A // some comment". It works basically like running a macro on each line :).
Some really cool stuff in there, and I even got to say all the ones I already knew out loud before you could, so I got to feel smart! It's the perfect video format.
I actually didn't know about the Vim sessions feature, but I prefer the way Harpoon does it. That join two lines feature is an oddball one I didn't know about... I can't think of a scenario where I might want to do this? Maybe if I had a long list of something I wanted to make into one line for some reason, it would be easy to write a simple macro using J to do that, but otherwise, drawing a blank.
Harpoon does handle sessions really well! I actually find myself using Join quite a bit. For example, it is handy when I have a list of items on separate lines that I want to quickly turn into function arguments.
Great idea! I actually had a much longer list of tips for this video, but I wanted to keep it concise. Thanks to all of you, I've also learned some new tricks, so there's definitely plenty of material for a part 2! :)
For appending to the end of a group of lines you don't have to jump to the end of the lines, shift-A is enough. Same for prepending. Shift-i is enough. Both shift I and A will go to start/end of line wherever on the line you are. They are also repeatable with period. You don't _have_ to block select either, visual line works as well, in case shift is in a better location than ctrl.
All good just that please specify wether you use lower case or capital letters next time on your key capture software. Confusing to see G when you actually meant g
@@henrymisc due to the german keyboard having the umlaute, it shifts special characters to other keys which then require you to use keys life ctrl shift and alt a lot more than on a us keyboard. secondly, the | characters are between shift and y (shift and z on a us keyboard) which makes typing them super unusual because you either have to press your ring finger and your pinky finger together to to get > or press right shift and the key which just feels unnatural. Most importantly are the brackets, which are shifted around by the umlaute like I mentionned. Especially for languages which use (){}[] heavily, like for example rust, it makes it very annoying to use a german keyboard in general, so any kind of speedup is useful. Essay over
That gg=G command to auto-indent would be amazing to be able to do. Does that require a specific plugin or anything? Or perhaps it only works for specific file types? LSP needed or something? I just tried it on yaml files in my work environment, and my personal nvim setup as well, and both just removed indents from all lines. It could be a skill issue on my end, I'll re-evaluate later once I have more time to dig into this. Great video by the way. Subscribed.
Interesting! I'm not 100% sure but I think it has to do with Treesitter. I'd try to install the yaml parser with treesitter. I have it in my treesitter config. You can find it in my dotfiles. Link in description. LMK if it helped.
If you need to quickly get into the terminal in Neovim, you don't even have to leave. Just use :term to open a terminal emulator window right in your workspace, run whatever command, and then use :q to exit the buffer.
The best motion I recently figured out is that in normal mode hit: '' This will move you back to the place you jumped from (Note: these are two single quotes) Overall one of the most powerfull features of vim are marks but i see no one talk about them
I'm using the Nord color scheme everywhere. In my previous video I explain my terminal setup in more detail, maybe you find that interesting. Thanks for watching :)
Do you have any tips for navigating in insert mode? I find myself just using C-arrows, since it is usually faster than exiting insert mode, navigating and reentering.
What is your Esc key? If you haven't done so already, you could consider remapping it to a more convenient location like Caps Lock, for example. Also, did you know you can run Normal mode commands directly from Insert mode with Ctrl+O?
What is your status-bar theme? Or overall theme if status bar design is part of it. Just starting with Neovim (kickstart) and would like to change "ugly" default status line. Also percentage of progress in file is missing in my config. It it present in vanilla vim. But can't easily find in nvim.
@@de-is I'm using Lualine with the Nord theme. You can find the config in my dotfiles repo. Also a video about the entire config is planned. Hope this helps :)
Very helpful, but please be more careful with the command cases that are shown. For example, you say 'press g,' but it shows a capital 'G,' which can be confusing for people following along.
@@lileightright Absolutely! Thanks for pointing that out. The tool I'm using isn't the best. I realized that too late. I'll look for another tool next time.
4:38 yes you can use `%` to jump between matching parenthesis/brackes/quotes or whatever, but I learnt recently you can also use `])` to jump to the next unmatched (from the current cursor's position) closing parenthesis, of `[[` to go to the previous square bracket. So if you have: ``` if (true) { int a = 0; //
i just realized, that my visual block mode and insert and append doesn't work anymore... somewhere on my way i adjusted my keybindings and i have no idea, what's wrong now.
@@FalconCodes-dx2nj I'd agree with this. ZZ and :x are equivalent. ZZ saves a keystroke since you don't need to press Enter. But pressing the same key twice can be slower or less convenient for some. It's great that Vim gives us options, so everyone can choose what feels most natural.
I'm using vim for a year and a half or something and I definitely didn't know about any of these, your videos are great, keep it up. But you gotta switch to linux, cmon 😆
01:00 How to achieve the same for quotes so I can use q instead of " for changing in quotes for example? When I used to have vim extension in vs code, this was on by default.
Very nice video, I learned a couple of things! I didn't fully understand how b and B actually work for replacing i( or i{ 🤔 what is the actual meaning of b/B here?
2:50 you pressed `jjjjjjjjjj` instead of pressing `G` Another way to solve that would be to do `:%s/.*/\0` and enter, I prefer that but it's not objectively better
Sadly I didn't learn something to day. Something you might like: * and # jump forwards and back to the word under the cursor, with word boundaries, so "word" will only match "word", but not "sword". g* and g# also find partial Matches.
Thanks for watching, and I appreciate the feedback! I'm glad you shared those tips - g* and g# are new to me, so I’ll definitely be trying them out.Thanks again for sharing!
The tool I'm using to show the keystrokes isn't the best - sorry about that. I'll look into other options for my next video. If you have any recommendations for a better one, please let me know!
keycastr is quite nice
@@elalitte2 Definitely looks like an upgrade - thanks :)
Screenkey a better one
Usually when I watch these videos I tend to see the same tips over and over, that seem more tailored to absolute beginners than frequent vim users. Not this one though, this was great and concise and taught me a few things I did not know. Thank you!
Thank you so much! I'm really glad to hear that the video brought something new to the table for you. Appreciate your kind words and thanks for watching!
totally agree, only see this vids for like 2 minutes, scoll down to comment section see someone has the same thoughts like me
Count me in too! Even if a vid shows me something I know, it's validating because the vimJourney is so personal that we get stuck using something just because we didn't know of another way.
I learned a few new things here and my usage of Shift+J has been validated.
How many years of using vim, still i had things to learn... wow
vib is a game changer
vim motions are easier if you translate them in your head, e.g for vib you should say it befor typing the motions.. copy inside brackets (v i b) , copy inside function (v i f), change inside quotes (c i ' ) ..etc. The motions are limited to your imagination
Been using vim for 3 years and still this video taught me things that I think would've taken me another year to find if I hadn't seen this video. Thanks a lot for vib and viB that's so fast
Thanks so much - this makes me really happy! Appreciate you watching!
@@henrymisc Okay guy this gives me hope, I'm only a few months in my vim journey and I already knew 90% of what it presented here. the i+b and g+x are the only two I learned. @henrymisc is is a great video though
yeah this one is cool. I had just started getting better at targeting the {, [ and ( keys on my keyboard and that will still come in handy when there are lines with different types of parentheses on them, but for all other ones I'm happy to use b and B :)
Just found out the line joining feature has an advantage beyond what you've shown. When combining two lines that included indent spaces, I always got frustrated because I had to delete the spaces. You can't imagine how I felt when I saw that just pressing the J key automatically removed the spaces and combined the lines simply and neatly. Thank you.
Thank you! Sessions were completely new to me. I will try to write something that autosaves the current session from time to time and restores it automatically if the file exists. That would be such a lifesaver
Thanks so much! Someone on reddit pointed out that there's also a plugin called vim-obsession, which offers a nicer interface for managing sessions, if you're interested in a pre-built solution.
Also check out persistent.nvim, written in lua by none other than folke ;)
"Jump to a specific line like a prod". We all have this prod PTSD lol.
Super cool video, learned a few tricks !
adding closing tags to the column selection was brilliant. Thanks a lot
Omg, i used neovim for 2 years and i knew only 2 of the tricks lol
I love how i still can keep going down VEEERY deep rabbit hole in neovim/vim even after feeling like i learnt everything lol
That's the beauty of it IMO :)
@@henrymisc I 100% agree.
Also: macros are the funniest feature in neovim. It feels like doing a coding game while coding. It's great!
@@no_name4796 Totally! It just makes coding more fun!
Nice tips men ! Love the B and shift B for brackets !
Nize video, pure gold and interesting motions.
Thanks, glad you liked it :)
amazing video, learned a lot from it!
I noticed you use enter for a new line in insert mode. However, reaching for Enter is painful for your pinky. I use for the new line in insert mode, along with instead of backspace and for deleting the word to to the left. When I learned that I can do that instead of reaching for Enter or Backspace, I felt such a relief. No more pain
@@sergeykolesnik1171 That's pretty smart! Is this default behavior or a custom keymap that you set up? I use a split keyboard with enter mapped to my thumb keys though, so for me this is quite comfortable actually :)
@@henrymisc I think it has been default since the first terminals. I try not to do any remapping for default keys
Fantastic job love the neovim tricks 😊.
This was a great video, well paced and clear! Please make more!
This is amazing! Really informative video.
Awesome tricks! Learned a lot from this video. Keep it up and share some more, master! 😊
Thanks! Will definitely do! :)
Great content! Thank you 😃
My pleasure! :)
Always something to learn. Thanks
this is actually fire, heaps fo stuff i didnt know
Glad I could add a few tricks to your arsenal. Thanks for watching :)
Wow, a lot of new things for me. Bravo!
Fantastic tips, I've forgotten some of these. Thanks.
Glad the tips were helpful - always good to have a little refresher. Appreciate you watching!
Holy smokes, that was a pure raw good content
Didn't know about most of these
Learned a lot. Really cool
Awesome video, have stuff to learn. Thanks a lot!
you are a saver, keep it going
Thanks for the encouraging feedback 🫶
I'm trying neovim for the last 2 months, some of the commands I didn't know.. thank you!
You're so welcome! :)
1 month into learning vim and already love it. and have known like 12 of them already lmao 😭😭
One month in and you're already picking up so much - props to you! Glad I could add the remaining 2 to your arsenal.
The visual block trick is so cool! I always use regexes for the same result 😅
nice content. 2 cents from me. C-Z /fg is actually not Vim function. It’s a Linux feature applied to all cli app. You can also type :terminal to have a seperate cmd window.
Also, the gx is actually the netrw key mapping, it’s vim defalut folder/file manager . But it’s OK to assume it’s part of the vim .
Thanks very much for sharing . Keep it coming ❤
You're right - thanks for your comment! :) Didn't know that gx is provided by netrw.
Wow! I am totally surprised, I knew some tips, but the ones I didn’t know blew my mind, you have a new subscriber from today, excellent content!
Awesome! Welcome on board :)
this was great!
For toggling case I prefer `vit~`. This also gives you access to `vitU` and `vitu` for uppercase and lowercase respectively.
nvm I just found `guit` and `gUit`... this is epic.
Man usages of visual block surprised me. Those use cases I absolutely would’ve just done a quick macro on the fly, but in that case visual block is definitely way faster! Big fan
Glad I could add it to your toolkit :) Thanks for your support!
Wait until you see :norm
Learned something new. Pretty cool. Thank you.
Happy to hear that! :) Let me know if you have any questions.
@@henrymisc What do you use to screen record? I use MacOS and tried OBS but it is not crisp at all.
@@chriscastillo8068 I'm using Cleanshot X. Would recommend it but features are a bit limited. I want to try OBS at some point.
4:41 is not necessarily a 'vim' trick but still extremely useful. i found about it first from a blog about using the unix tools as an IDE itself
Neovim is just amazing, I've been using it for a little while longer, but I still use almost the bare minimum of basics, but it is still enough to make text editing so much easier and more comfortable.
Couldn't agree more! And sometimes you pick up little tricks here and there that just make our lives so much easier.
My God, the ctrl-z and fg combination blew my mind haha :D Thanks!
That's actually a shell standard, and you can do it with any process!
@@Flackon To add to that, if you have multiple jobs running in the background, you can check their status with jobs and bring a specific job to the foreground using fg %. For example, fg %2 will bring the second job back. Thought you’d find this tip handy as well! :)
I think that the most useful thing I learned in recent years is: ":norm! ". You can select multiple lines and call a sequence of key strokes on each one.
Example: select in visual mode a few lines and type: ":norm! 0wiprefix " or ":norm! A // some comment". It works basically like running a macro on each line :).
Super powerful, thank you for sharing!
Finally another channel with good neovim content, not just the usual begging stuff, already subscribed
Much appreciated! Thanks for your support!
Some really cool stuff in there, and I even got to say all the ones I already knew out loud before you could, so I got to feel smart! It's the perfect video format.
@@Fittiboy Thanks, I appreciate the feedback! I'm considering doing a part 2 :)
OMG, its AMAZING!!!
You got my like Sr. Cheers
What a great tips
really useful advice, jump between different files, using '!
You deserve more subs😭
bring more videos like this.
More Vim and Neovim content is planned :)
I actually didn't know about the Vim sessions feature, but I prefer the way Harpoon does it.
That join two lines feature is an oddball one I didn't know about... I can't think of a scenario where I might want to do this? Maybe if I had a long list of something I wanted to make into one line for some reason, it would be easy to write a simple macro using J to do that, but otherwise, drawing a blank.
Harpoon does handle sessions really well! I actually find myself using Join quite a bit. For example, it is handy when I have a list of items on separate lines that I want to quickly turn into function arguments.
We want to see more tips like that. Can you also make a video on ex commands because primegen uses them a lot
Great idea! I actually had a much longer list of tips for this video, but I wanted to keep it concise. Thanks to all of you, I've also learned some new tricks, so there's definitely plenty of material for a part 2! :)
For appending to the end of a group of lines you don't have to jump to the end of the lines, shift-A is enough. Same for prepending. Shift-i is enough.
Both shift I and A will go to start/end of line wherever on the line you are. They are also repeatable with period.
You don't _have_ to block select either, visual line works as well, in case shift is in a better location than ctrl.
Thanks!
Welcome!
Great video subscribed
Thank you :)
Cool video. Get some new things. Thanks a lot👍
All good just that please specify wether you use lower case or capital letters next time on your key capture software. Confusing to see G when you actually meant g
great work! I just subscribed
Thank you! Appreciate you watching :)
4:38 the % also jumps opening and closing html tags.
Premium tips thanks for making this video 🙏🏽
These motions are super useful for German keyboard layouts. I wonder why I go them from you...
I'm also German, but I don't use a German keyboard layout. I'm curious - what makes them particularly useful for that layout?
@@henrymisc due to the german keyboard having the umlaute, it shifts special characters to other keys which then require you to use keys life ctrl shift and alt a lot more than on a us keyboard. secondly, the | characters are between shift and y (shift and z on a us keyboard) which makes typing them super unusual because you either have to press your ring finger and your pinky finger together to to get > or press right shift and the key which just feels unnatural. Most importantly are the brackets, which are shifted around by the umlaute like I mentionned. Especially for languages which use (){}[] heavily, like for example rust, it makes it very annoying to use a german keyboard in general, so any kind of speedup is useful. Essay over
thanks sir, now i can enjoy my life at 18 years old 😃
That gg=G command to auto-indent would be amazing to be able to do. Does that require a specific plugin or anything? Or perhaps it only works for specific file types? LSP needed or something?
I just tried it on yaml files in my work environment, and my personal nvim setup as well, and both just removed indents from all lines. It could be a skill issue on my end, I'll re-evaluate later once I have more time to dig into this.
Great video by the way. Subscribed.
Interesting! I'm not 100% sure but I think it has to do with Treesitter. I'd try to install the yaml parser with treesitter. I have it in my treesitter config. You can find it in my dotfiles. Link in description. LMK if it helped.
Great that this video is getting good views. Thanks I am learning a lot. VIM IDE 🚀
Thanks so much! I'm glad you find it helpful. It's awesome to see the community enjoying it!
What I learnt is that the g prefix was for more than just ctrl-a. It seems very powerful
Marking with m was something i learnt.
Also i use ctrl + O
ctrl + [
ctrl + t for going through my c code.
Awesome, thanks for sharing!
All I need now is a way to remember all of these codes 😂
If you need to quickly get into the terminal in Neovim, you don't even have to leave. Just use :term to open a terminal emulator window right in your workspace, run whatever command, and then use :q to exit the buffer.
Good one thx!
The best motion I recently figured out is that in normal mode hit: ''
This will move you back to the place you jumped from
(Note: these are two single quotes)
Overall one of the most powerfull features of vim are marks but i see no one talk about them
Wow this is powerful! I used to set marks for this. Thanks!
Nice content ! Suscribed !
Thank you, I appreciate you watching :)
I really like the theme and thr color pallete what is it and the terminal workflow?
I'm using the Nord color scheme everywhere. In my previous video I explain my terminal setup in more detail, maybe you find that interesting. Thanks for watching :)
Do you have any tips for navigating in insert mode? I find myself just using C-arrows, since it is usually faster than exiting insert mode, navigating and reentering.
What is your Esc key? If you haven't done so already, you could consider remapping it to a more convenient location like Caps Lock, for example. Also, did you know you can run Normal mode commands directly from Insert mode with Ctrl+O?
What is your status-bar theme? Or overall theme if status bar design is part of it. Just starting with Neovim (kickstart) and would like to change "ugly" default status line. Also percentage of progress in file is missing in my config. It it present in vanilla vim. But can't easily find in nvim.
@@de-is I'm using Lualine with the Nord theme. You can find the config in my dotfiles repo. Also a video about the entire config is planned. Hope this helps :)
Very helpful, but please be more careful with the command cases that are shown. For example, you say 'press g,' but it shows a capital 'G,' which can be confusing for people following along.
@@lileightright Absolutely! Thanks for pointing that out. The tool I'm using isn't the best. I realized that too late. I'll look for another tool next time.
Shift key is shown when capital letters are pressed btw, but yeah it is a little bit uncomfortable
4:38 yes you can use `%` to jump between matching parenthesis/brackes/quotes or whatever, but I learnt recently you can also use `])` to jump to the next unmatched (from the current cursor's position) closing parenthesis, of `[[` to go to the previous square bracket.
So if you have:
```
if (true) {
int a = 0; //
I didn't know that one. Thank you!
i just realized, that my visual block mode and insert and append doesn't work anymore... somewhere on my way i adjusted my keybindings and i have no idea, what's wrong now.
Didn't even mention :x which is the better alternative to any of the binds you talked about
I would argue that ZZ and :x are about the same in terms of convienence
@@FalconCodes-dx2nj I'd agree with this. ZZ and :x are equivalent. ZZ saves a keystroke since you don't need to press Enter. But pressing the same key twice can be slower or less convenient for some. It's great that Vim gives us options, so everyone can choose what feels most natural.
I'm using vim for a year and a half or something and I definitely didn't know about any of these, your videos are great, keep it up.
But you gotta switch to linux, cmon 😆
Glad you found it useful :) I have a mac at work and at home, but I've always wanted to dive more into Linux! Might do it eventually.
Can you do a video on how to get your config? Im starting my journey to vim
@@cricocrak Of course! I'm planning it for the near future. Have fun learning Vim :)
01:00 How to achieve the same for quotes so I can use q instead of " for changing in quotes for example? When I used to have vim extension in vs code, this was on by default.
You could set up a keymap for this. Something like this should work:
vim.keymap.set('o', 'aq', "a'")
vim.keymap.set('o', 'iq', "i'")
@@henrymisc It worked! Thanks a lot
how were you able to give your editor a custom background?
I set it transparent in Neovim and set it in WezTerm. I explain it in detail in my video about configuring WezTerm :)
Not bad video, but new already all the features
Very nice video, I learned a couple of things! I didn't fully understand how b and B actually work for replacing i( or i{ 🤔 what is the actual meaning of b/B here?
They are synonyms basically. The b text object is a synonym for ( and B for {.
@@henrymisc huh! You learn every day… thank you m8, keep ‘em videos coming!
Alt the Magic Key need to know earlyer
2:50 you pressed `jjjjjjjjjj` instead of pressing `G`
Another way to solve that would be to do `:%s/.*/\0` and enter, I prefer that but it's not objectively better
@@yanisfourel Well spotted! Indeed G would be better! I love that substitute command. Thanks for sharing! :)
Can u give a link for ur tmux conf?
You can find it in my dotfiles (link in description). Stay tuned for a future video on it :)
vib/viB.
Already a useful video.
viq also works for strings
capital G is awesome
what font are you using?
JetBrains Mono 🙌
@@henrymisc aight thanks
Noice
I like leader+q much more 😅
Also, ^i and ^o are super useful to jump back and forward, let’s say after you do a gf
Totally! The jump list is super powerful!
Sadly I didn't learn something to day.
Something you might like:
* and # jump forwards and back to the word under the cursor, with word boundaries, so "word" will only match "word", but not "sword".
g* and g# also find partial Matches.
Thanks for watching, and I appreciate the feedback! I'm glad you shared those tips - g* and g# are new to me, so I’ll definitely be trying them out.Thanks again for sharing!
I felt like I unlocked a superpower when I started using these
0:06 Gem ^^
🫡🫡
Nur als kleiner Tipp: es heißt sinn ergeben nicht Sinn machen
Great tips and motions!,
Liked & subscribed
Thanks, appreciate you watching! :)
3:19 I would've done something like :%s:.*:\0: