Real Vim ninjas count every keystroke - do you?

Pick a challenge, fire up Vim, and show us what you got.

Changelog, Rules & FAQ, updates: @vimgolf, RSS.

Your VimGolf key: please sign in

$ gem install vimgolf
$ vimgolf setup
$ vimgolf put 9v00680e54330000000006c0

Create json from a .env file

A simple everyday task.

Start file
# API Settings
JOBS_API_URL=http://localhost:5000
JOBS_BASE_URL=http://localhost:8000
SCRAPERS_BASE_URL=http://localhost:9900

# Database Settings
JOBS_DATABASE_URI=mongodb://mongouser:mongopassword@127.0.0.1:27017/app

# Redis Settings
JOBS_REDIS_DSN=redis://127.0.0.1:6000

# Data API
DATA_BASE_URL=http://127.0.0.1:8900

# Minio config
JOBS_MINIO_SECURE=false
JOBS_MINIO_ACCESS_KEY=miniouser
JOBS_MINIO_SECRET_KEY=miniosecret
JOBS_MINIO_HOST=127.0.0.1:9500
JOBS_MINIO_DEFAULT_BUCKET=jobs
JOBS_MINIO_REGION=us-west-1
JOBS_MINIO_CREATE_BUCKETS=false
JOBS_MINIO_RESULTS_FORMAT=results/{job.id}.json
JOBS_MINIO_ARGUMENTS_FORMAT=arguments/{job.id}.json
JOBS_MINIO_SERVICES_PATH=services/{job.service.bucket_name}
JOBS_MINIO_LOGS_BUCKET=

# RabbitMQ Settings
JOBS_RABBITMQ_URI=amqp://rabbitmquser:rabbitmqpassword@127.0.0.1:5672

# Package registry
REGISTRY_TOKEN=g_dka000111222333444

LOG_FORMAT=text

# Slack notifications
SLACK_TOKEN=
LOGGING_CHANNEL=

# Metadata API
TEST_METADATA_BASE_URL=http://127.0.0.1:8801
End file
{
    "JOBS_API_URL": "http://localhost:5000",
    "JOBS_BASE_URL": "http://localhost:8000",
    "SCRAPERS_BASE_URL": "http://localhost:9900",
    "JOBS_DATABASE_URI": "mongodb://mongouser:mongopassword@127.0.0.1:27017/app",
    "JOBS_REDIS_DSN": "redis://127.0.0.1:6000",
    "DATA_BASE_URL": "http://127.0.0.1:8900",
    "JOBS_MINIO_SECURE": "false",
    "JOBS_MINIO_ACCESS_KEY": "miniouser",
    "JOBS_MINIO_SECRET_KEY": "miniosecret",
    "JOBS_MINIO_HOST": "127.0.0.1:9500",
    "JOBS_MINIO_DEFAULT_BUCKET": "jobs",
    "JOBS_MINIO_REGION": "us-west-1",
    "JOBS_MINIO_CREATE_BUCKETS": "false",
    "JOBS_MINIO_RESULTS_FORMAT": "results/{job.id}.json",
    "JOBS_MINIO_ARGUMENTS_FORMAT": "arguments/{job.id}.json",
    "JOBS_MINIO_SERVICES_PATH": "services/{job.service.bucket_name}",
    "JOBS_MINIO_LOGS_BUCKET": "",
    "JOBS_RABBITMQ_URI": "amqp://rabbitmquser:rabbitmqpassword@127.0.0.1:5672",
    "REGISTRY_TOKEN": "g_dka000111222333444",
    "LOG_FORMAT": "text",
    "SLACK_TOKEN": "",
    "LOGGING_CHANNEL": "",
    "TEST_METADATA_BASE_URL": "http://127.0.0.1:8801"
}

View Diff

1,41c1,25
< # API Settings
< JOBS_API_URL=http://localhost:5000
< JOBS_BASE_URL=http://localhost:8000
< SCRAPERS_BASE_URL=http://localhost:9900
< 
< # Database Settings
< JOBS_DATABASE_URI=mongodb://mongouser:mongopassword@127.0.0.1:27017/app
< 
< # Redis Settings
< JOBS_REDIS_DSN=redis://127.0.0.1:6000
< 
< # Data API
< DATA_BASE_URL=http://127.0.0.1:8900
< 
< # Minio config
< JOBS_MINIO_SECURE=false
< JOBS_MINIO_ACCESS_KEY=miniouser
< JOBS_MINIO_SECRET_KEY=miniosecret
< JOBS_MINIO_HOST=127.0.0.1:9500
< JOBS_MINIO_DEFAULT_BUCKET=jobs
< JOBS_MINIO_REGION=us-west-1
< JOBS_MINIO_CREATE_BUCKETS=false
< JOBS_MINIO_RESULTS_FORMAT=results/{job.id}.json
< JOBS_MINIO_ARGUMENTS_FORMAT=arguments/{job.id}.json
< JOBS_MINIO_SERVICES_PATH=services/{job.service.bucket_name}
< JOBS_MINIO_LOGS_BUCKET=
< 
< # RabbitMQ Settings
< JOBS_RABBITMQ_URI=amqp://rabbitmquser:rabbitmqpassword@127.0.0.1:5672
< 
< # Package registry
< REGISTRY_TOKEN=g_dka000111222333444
< 
< LOG_FORMAT=text
< 
< # Slack notifications
< SLACK_TOKEN=
< LOGGING_CHANNEL=
< 
< # Metadata API
< TEST_METADATA_BASE_URL=http://127.0.0.1:8801
---
> {
>     "JOBS_API_URL": "http://localhost:5000",
>     "JOBS_BASE_URL": "http://localhost:8000",
>     "SCRAPERS_BASE_URL": "http://localhost:9900",
>     "JOBS_DATABASE_URI": "mongodb://mongouser:mongopassword@127.0.0.1:27017/app",
>     "JOBS_REDIS_DSN": "redis://127.0.0.1:6000",
>     "DATA_BASE_URL": "http://127.0.0.1:8900",
>     "JOBS_MINIO_SECURE": "false",
>     "JOBS_MINIO_ACCESS_KEY": "miniouser",
>     "JOBS_MINIO_SECRET_KEY": "miniosecret",
>     "JOBS_MINIO_HOST": "127.0.0.1:9500",
>     "JOBS_MINIO_DEFAULT_BUCKET": "jobs",
>     "JOBS_MINIO_REGION": "us-west-1",
>     "JOBS_MINIO_CREATE_BUCKETS": "false",
>     "JOBS_MINIO_RESULTS_FORMAT": "results/{job.id}.json",
>     "JOBS_MINIO_ARGUMENTS_FORMAT": "arguments/{job.id}.json",
>     "JOBS_MINIO_SERVICES_PATH": "services/{job.service.bucket_name}",
>     "JOBS_MINIO_LOGS_BUCKET": "",
>     "JOBS_RABBITMQ_URI": "amqp://rabbitmquser:rabbitmqpassword@127.0.0.1:5672",
>     "REGISTRY_TOKEN": "g_dka000111222333444",
>     "LOG_FORMAT": "text",
>     "SLACK_TOKEN": "",
>     "LOGGING_CHANNEL": "",
>     "TEST_METADATA_BASE_URL": "http://127.0.0.1:8801"
> }

Solutions

The best way to learn is to practice. Below, you will find some of the solutions other golfers have entered. To unlock higher ranked solutions, submit your own entry which does as well or better than the solutions you can currently see - climb the ladder!

Check out these helpful resources to improve your Vim skills... Game on.

Unlock 339 remaining solutions by signing in and submitting your own entry
#340 Isaac Yu / @yxd0379 - Score: 1250 - 05/30/25 @ 14:57
ddjjjddddjddddjddddjddddjjjjjjjjjjjddddjddjkddjddjddddjjddddkkkkkkkkkkkkkkkkkkkkkkvjjjjjjjjjjjjjjjjjjjjjjjjjjllllllllllllllllllllllllllllllllllllllllllllllll<Tab><Tab><Tab><Tab><Esc><Esc><Esc>hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhi    <Esc>khhhi    <Esc>khhhi    <Esc>k hhhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhi    k<Esc>xkhhhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhi    <Esc>khhhhi    "<Esc><Esc>khhhhi"<C-U>    H<C-U>"<Esc>khhhhi    "<Esc>khhhhi    "<Esc>Oi<C-U><C-U>{<Esc>jlllllllllllllllllxi:<C-U>": "<Esc>eeeee <BS>q<Esc><Esc>a",<Esc>jhhhhbbbhxi": "<Esc>eeee    la",<Esc>jhbbbbbhx"i:<Esc><Esc><Esc>i": "<Esc>eeee  llla",<Esc>jbbbbbbxi": " <C-U><0xe2><0x80><0x9c><0xe2><0x80><0x9d><Left><C-U><C-U><Esc>uui": "<Esc>eeeeeeeeeeeeeeelllla",<Esc>jhhbbbbbbbbbbbbbi"<Esc>ea"<Esc>lxi: "<Esc>eeeeeellllllllla",<Esc>jeebbbbbbbbbbbbbbi:<C-U>"<Esc>elxi": "<Esc>llllleelllellllea",<Esc>jbbbi"<Esc>elxi:<C-U>": "<Esc>ea",<Esc>jeebbbbblljbbbbeewwwbbbi:<C-U>"<Esc>eexi": "<Esc>ea",<Esc>jebbbbi:<C-U>"<Esc>elxi": "<Esc>ea",<Esc>jhhhhhhhbbbbbbi"<Esc>eexi": "<Esc>eeeeeeeeea",<Esc>jbbbi"<Esc>eexi": "<Esc>ea",<Esc>jbbbbbbi"<Esc>eexi:<C-U>": "<Esc>eeeeea",<Esc>jbbbi"<Esc>eexi": "<Esc>ea",<Esc>jbbbbbi"<Esc>eexi:<C-U>:<C-U>": "<Esc>eeeeeeei<Esc>la",<Esc>jeebbbbbbbbbbi:<C-U>"<Esc>lleexi:<C-U>": "<Esc>eeeeeeellla",<Esc>jhhhhhhhhhhebbbbbbbbbi"<Esc>lllleexi": "<Esc>eeeeeeela",<Esc>jhehbi"<Esc>eexa:<C-U>": "",<Esc>jhhhbbbbi"<Esc>eexi": "<Esc>eeeeeeeeelllllllllla",<Esc>ja<Esc>hhbbbi:<C-U>"<Esc>eexi": "<Esc>ea",<Esc>jbbbi"<Esc>eexi": "<Esc>ea",<Esc>jbi"<Esc>eexa": "",<Esc>jjjjkbi"<Esc>llbeexa": ::<C-U>": ::<C-U>": "",<Esc>jbi"<Esc>eexi": "<Esc>eeeeeeeeeeeea"<Esc>o<C-U>}<Esc>:wq2<BS><CR>

0 comments


Created by: @maiku1008

340 active golfers, 1463 entries

Leaderboard (lowest score wins):
46
#91 - Damien Baldy / @dbaldy

05/20/2025 at 08:42PM

46
#92 - Katie Gardner / @KatieLG

05/30/2025 at 06:47PM

46
#93 - Rayan Ali SALEM / @VKWHM

07/04/2025 at 07:58PM

47
#94 - Greg Loesch / @loeschg

05/08/2025 at 05:05AM

47
#95 - Bthxtly / @Bthxtly

06/22/2025 at 02:49PM

47
#96 - Ben Lenarts / @benlenarts

07/11/2025 at 04:31PM

47
#97 - Victor Ramirez / @virako

10/20/2025 at 11:30AM

48
#98 - Karan / @KaranVaity

06/07/2025 at 11:14AM

48
#99 - asby / @asby

06/17/2025 at 10:51AM

48
#100 - SynHD900 / @SynHD900

06/29/2025 at 07:21AM

48
#101 - sibouras / @sibouras

08/02/2025 at 03:06PM

48
#102 - Davidoof / @davidoof3141

08/13/2025 at 06:03PM

48
#103 - codemaster330 / @codemaster330

08/31/2025 at 03:31PM

48
#104 - mutilator630 / @mutilator630

01/14/2026 at 09:43AM

49
#105 - Albin Soutif / @AlbinSou

05/03/2025 at 07:05PM

49
#106 - François / @fleborne

07/01/2025 at 08:14PM

49
#107 - Mohammed Tangestani / @tangestani

01/12/2026 at 06:18PM

50
#108 - EvenAnton / @EvenAnton

05/15/2025 at 08:13AM

50
#109 - Norgus / @Norgus

05/20/2025 at 01:09PM

50
#110 - Frank Benoit / @frankbenoit

05/20/2025 at 09:00PM

50
#111 - Drake Brown / @brownthesr

07/20/2025 at 04:49PM

51
#112 - Berk Güler / @Wondrous27

04/29/2025 at 07:12PM

51
#113 - ak@developer / @Ajay-056

04/30/2025 at 02:33PM

51
#114 - gFffdhg6UX3ceYvTsLms / @gFffdhg6UX3ceYvTsLms

06/26/2025 at 02:01PM

51
#115 - dbil25 / @dbil25

10/22/2025 at 11:29PM

52
#116 - hiro1234omochi / @hiro1234omochi

05/10/2025 at 12:52PM

52
#117 - raylmorris / @raylmorris

06/14/2025 at 07:36AM

52
#118 - Ethan Rietz / @erietz

07/17/2025 at 11:55PM

52
#119 - ♜ Pepe Doval / @pepellou

08/14/2025 at 07:37PM

52
#120 - i5nipe / @i5nipe

11/12/2025 at 01:21AM