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 412 remaining solutions by signing in and submitting your own entry
#413 Jason-Lee3 / @Jason-Lee3 - Score: 1378 - 07/16/26 @ 06:53
ddjjjddddjjkddddjjkddddjddddjjjjjjjjjjjjkkjjkddddjjkddddjddjddjkddjjddddkkkkkkkkkkkkkkkkkkkkkkki'<BS>{<CR><Esc>jjjjjjjjjjjjjjjjjjjjjjjjjo}<Esc>kkkkkkkkkkkkkkkkkkkkkkki"<Esc>lllllllllllla"<Esc>bbi    <Esc>llwllwhhhhi"<Esc>llwlwllEa"<Esc>jBi    #<S-><BS>"<Esc>wWkWwwi"<Esc>a<Esc>la"<Esc>Ea"<Esc><Esc>kkja,<Esc>ja,<Esc>jBi#<BS>    "<Esc>lwlhi"<Esc>lli"<Esc>lEa",<Esc>jbBi"<BS>    "<Esc>jkEa"<Esc>Bllwlhi"<Esc>lli"<Esc>EjBi    #<BS>"<Esc>lwi"<Esc>lla<BS>r<BS>"r<Esc>lEa",<Esc>kEa.<Esc><BS>la<BS>,<Esc>jjBi    <Esc>li"<Esc>llwi"<Esc>lli"<Esc>lWkEa",<Esc>ja",<Esc>jEa",<Esc>jEklla<Esc>lla",<Esc>ja",<Esc>ja",<Esc>ja",<Esc>jlla",<Esc>jEa",<Esc>lljllla",<Esc>jEa",<Esc>ja"",<Esc>jjkEa",<Esc>ja",<Esc>ja",<Esc>ja"",<Esc>kkkkkkkkkkkkkkkkjjkkkkkjjjkjjjjjjjjjjjjjjjjjjlla"",<Esc>jEa",<BS><Esc>Bi    <Esc>kkkkkkkkkkkkkkkkhhhi    <Esc>jhhhbljBi    <Esc>jbblljbBi    <Esc>jBi    B<BS><Esc>jhhhi     <BS><Esc>jBi    <Esc>jBi    <Esc>jBi     <BS><Esc>jjkBi    <Esc>jjkBi    <Esc>jjkBi    <Esc>jBi    <Esc>jBi    <Esc>jBi    <Esc>jBi    <Esc>jBi    <Esc>kkkkkkkkkkkkkkkkkkkkkllllllllllllllllhr:jlr:jllllr:jlhR<Esc>lr:jhhhr:jhr:jllr:jllllrLr:jr:jhhhhhhr:jllllwlhr:jhhhhhhhhhlr:jllwlhr:jr:jjkllr:jjkhhhr:jjkhhr:jhhhhhr:jjhhkr:jhhhhr:jlr:jllllr:jlllllllr:<Esc>li"<Esc>hli <Esc>kkkjjhhi <Esc>khhi <Esc>khi:<BS> "<Esc>kllli "<Esc>kwwwllhhhhhhi "<Esc>klllli <Esc>klllhi" <Esc>kkjlli" <Esc>kkjhhhi" <BS><BS> "<Esc>jllli<BS><BS> "<Esc>kklllhhhhhhi "<Esc>kBlllwli "<Esc>kllwli "<Esc>kBlwli "<Esc>kllllli "<Esc>khi "<Esc>khhhhhi "<Esc>khhhi <Esc>kli <Esc>kklljli <Esc>ki <Esc>khhhhi <Esc>khi <Esc>jjjjjjbi"<Esc>lwlhi"<Esc>jlla"<Esc>Bi"<Esc>jhli"<Esc>ji"<Esc>ji"<Esc>ji"<Esc>ji"<Esc>ji"<Esc>jji<Esc>kil<BS><Esc>lli"<Esc>ji"<Esc>ji"<Esc>ji"<Esc>kkkkkkkkkkkwwjjlllli"<Esc>jhhhhhhi"<Esc>jllwlhi"<Esc>jBhhi"<Esc>jllwlhi"<Esc>ji"<Esc>jlli"<Esc>jjkhhhi"<Esc>llli<Esc>lli<BS><BS> "<Esc>jhhhhi"<Esc>jbhhhi"<Esc>jhhhhi"<Esc>jhhhhi"<Esc>jli"<Esc>jlllli"<Esc>jllllllli"<Esc>Bi"<Esc>ki"<Esc>ki"<Esc>ki"<Esc>ki"<Esc>kkkkk:wq<CR>

0 comments


Created by: @maiku1008

413 active golfers, 1710 entries

Leaderboard (lowest score wins):
71
#271 - Roméo Maignal / @maignal

06/10/2026 at 02:55PM

72
#272 - paperbenni / @paperbenni

04/27/2025 at 05:07PM

72
#273 - Jordan Hu / @jskhu

05/14/2025 at 11:56PM

72
#274 - Suraj Kumar / @kumarsuraj512

08/15/2025 at 06:55PM

72
#275 - Jerry Yang / @efJerryYang

10/31/2025 at 12:43AM

72
#276 - Njandon7 / @Njandon7

01/16/2026 at 11:29PM

73
#277 - Guillermo Tanamachi / @Memohto

06/01/2025 at 10:35PM

73
#278 - Rakshith Bellare / @RakshithNM

07/26/2025 at 03:30PM

73
#279 - clejui / @clejui

02/25/2026 at 01:11PM

73
#280 - Mirko Grönroos / @hermo

07/23/2026 at 08:54PM

74
#281 - Bennett Hunter / @bennetthunter10

04/30/2025 at 02:03PM

74
#282 - John Smith / @johnsmith0x3f

06/22/2025 at 08:27AM

74
#283 - Sarah / @cringeybabey

02/14/2026 at 04:58AM

74
#284 - JessicaArigbabu / @JessicaArigbabu

08/14/2026 at 05:39PM

75
#285 - Michael Cuffaro / @maiku1008

04/27/2025 at 04:07PM

75
#286 - Dylan / @dylancobb

05/17/2025 at 12:36AM

75
#287 - Jonathan Wooding / @jonwooding

05/31/2025 at 02:13PM

75
#288 - DateMasamune2000 / @DateMasamune2000

06/18/2025 at 07:08PM

75
#289 - CicadaCinema / @CicadaCinema

06/23/2025 at 04:35PM

75
#290 - JvdB01 / @JvdB01

12/09/2025 at 03:35PM

75
#291 - matthi711 / @matthi711

12/18/2025 at 10:25AM

75
#292 - cjmHK / @cjmHK

03/17/2026 at 09:48AM

76
#293 - Mackenzie Haight / @mghaight

08/11/2025 at 08:14PM

76
#294 - Scott Brady / @scottbradybuckii

10/01/2025 at 03:30AM

77
#295 - JosiahBLB / @JosiahBLB

09/02/2025 at 04:26AM

77
#296 - EthanMcGuire / @EthanMcGuire

12/27/2025 at 05:45PM

77
#297 - Dani Bengl / @cb341

12/28/2025 at 12:13AM

77
#298 - Daniel / @2phost

01/11/2026 at 12:12AM

78
#299 - Alfred Baumann / @CheesePlated

05/13/2025 at 07:20AM

78
#300 - Mohammed Elwardi Fadeli / @FoamScience

08/24/2025 at 08:35PM