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 71 remaining solutions by signing in and submitting your own entry
#72 Gia Bao Phi / @bao1311 - Score: 215 - 05/04/25 @ 22:28
:%s/<BS><BS><BS>%f/#\|^//d<BS><BS>d<CR>;:<Up><Left><Left><Left><Left><Left><Left>^<BS><Left><BS>g<Right><Right><Right><Right><Right><BS>^$<Right><Right><Left><Left><Left><Left><Left><Left><Right><Left>\(.*\)<CR>gg:s/<BS>/<BS><BS>%s/^/"/g<CR>:<Up><Left><Left><Left><Left><BS>$<CR><Esc>:w<CR>:%s/=/": "/g<CR>ggVG:<Esc>s/<Esc>uVG:s/^/   <BS><BS><BS>   /<BS> /g<CR><Esc>ggOi<BS><BS><BS><BS><BS>{<Esc>Go}i<BS><Esc>i<BS><BS><BS><BS><Esc>kkkkkkkkkkkkkkkkkkkkkkkkjvi{:s/$/,/g<CR><Esc>jjjjkA<BS><Esc>:w<CR>:wq<BS>q<CR>

0 comments


Created by: @maiku1008

72 active golfers, 286 entries

Leaderboard (lowest score wins):
39
#1 - Peppa Pig / @PeppaPigSg

04/29/2025 at 01:37AM

39
#2 - Gatsby76(Sloan Yang) / @Sloan-Yang

05/06/2025 at 12:00PM

39
#3 - Leon Kacowicz / @leonkacowicz

05/07/2025 at 06:46PM

39
#4 - Julius Degesys / @JuliusDegesys

05/08/2025 at 12:11AM

39
#5 - kooxn / @kooxn

05/11/2025 at 08:48AM

39
#6 - hikyae / @hikyae

05/12/2025 at 11:06AM

39
#7 - ArnaudValette / @ArnaudValette

05/12/2025 at 10:08PM

39
#8 - Chino / @MarcoMeinardi

05/15/2025 at 08:10AM

41
#9 - DaCoVI / @DaCoVI

04/29/2025 at 01:32PM

41
#10 - jonas-grobe / @jonas-grobe

04/29/2025 at 06:45PM

41
#11 - Joachim Wedin / @joachimwedin

05/01/2025 at 08:09PM

41
#12 - shooker2012 / @shooker2012

05/06/2025 at 07:22AM

41
#13 - kyle tilman / @ktilcu

05/13/2025 at 11:40PM

41
#14 - JustAnAverageGuy / @JustAnAverageGuy

05/14/2025 at 09:27AM

41
#15 - Joseph Courtney / @josephcourtney

05/15/2025 at 04:47PM

43
#16 - "Smylers" / @Smylers2

05/08/2025 at 02:35PM

43
#17 - jimmymills / @jimmymills

05/09/2025 at 05:33PM

45
#18 - Lars van Dartel / @LarsvanDartel

05/07/2025 at 09:13PM

46
#19 - Jaxson Pahukula / @jaxsonp

04/29/2025 at 12:27AM

46
#20 - daviddcox / @daviddcox

04/29/2025 at 12:29AM

46
#21 - Yordan Boikov / @yboikov

04/30/2025 at 06:51PM

46
#22 - ashfinal / @ashfinal

05/12/2025 at 01:43PM

47
#23 - Greg Loesch / @loeschg

05/08/2025 at 05:05AM

49
#24 - Albin Soutif / @AlbinSou

05/03/2025 at 07:05PM

50
#25 - EvenAnton / @EvenAnton

05/15/2025 at 08:13AM

51
#26 - Berk Güler / @Wondrous27

04/29/2025 at 07:12PM

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

04/30/2025 at 02:33PM

52
#28 - hiro1234omochi / @hiro1234omochi

05/10/2025 at 12:52PM

53
#29 - Knaughty / @Kn4ughty

05/05/2025 at 11:44PM

53
#30 - Lowisz / @Lowisz

05/08/2025 at 10:49PM