From cc2b47f47a593e0c5e3e8a5278a0d0b7905e7ce4 Mon Sep 17 00:00:00 2001 From: john <johnoctubre7@gmail.com> Date: Sun, 13 Oct 2019 14:54:35 -0400 Subject: [PATCH 01/46] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index c21fcd9..e742f0c 100644 --- a/README.md +++ b/README.md @@ -346,3 +346,10 @@ Ctrl+B x y ``` Note that ```Ctrl+B``` is the default prefix. For different prefixes, the command must be adjusted accordingly. + +## The Intern way +Credit: @johnoct + +1. Don't even try to exit on your own +2. Ask Senior right away + From cf9185a1df2eaf4174f0ce10939e0f5a0abcd70e Mon Sep 17 00:00:00 2001 From: serjepatoff <SerjEpatoff@gmail.com> Date: Wed, 16 Oct 2019 13:33:09 +0300 Subject: [PATCH 02/46] The debugger way --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index e742f0c..8357e8a 100644 --- a/README.md +++ b/README.md @@ -353,3 +353,15 @@ Credit: @johnoct 1. Don't even try to exit on your own 2. Ask Senior right away +## The debugger way +Credit: @serjepatoff + +### Linux +$ gdb `which vim` +(gdb) r <Enter> +Ctrl-Z q <Enter> y <Enter> + +### Mac +$ lldb `which vim` +(lldb) r <Enter> +Ctrl-C q <Enter> <Enter> From 7caa68c9cbc050424e3b35a28458890994c19c69 Mon Sep 17 00:00:00 2001 From: serjepatoff <SerjEpatoff@gmail.com> Date: Wed, 16 Oct 2019 13:34:43 +0300 Subject: [PATCH 03/46] The debugger way --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8357e8a..ebee635 100644 --- a/README.md +++ b/README.md @@ -356,12 +356,16 @@ Credit: @johnoct ## The debugger way Credit: @serjepatoff -### Linux +Linux +``` $ gdb `which vim` (gdb) r <Enter> Ctrl-Z q <Enter> y <Enter> - -### Mac +``` + +Mac +``` $ lldb `which vim` (lldb) r <Enter> Ctrl-C q <Enter> <Enter> +``` From 7c39064e6c379fd6c5eb56368817771b85bc798b Mon Sep 17 00:00:00 2001 From: Benny Baumann <BenBE@geshi.org> Date: Mon, 21 Oct 2019 19:21:35 +0200 Subject: [PATCH 04/46] Add the mathematician's way --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index e742f0c..04b4f7c 100644 --- a/README.md +++ b/README.md @@ -347,6 +347,10 @@ Ctrl+B x y Note that ```Ctrl+B``` is the default prefix. For different prefixes, the command must be adjusted accordingly. +## The Mathematician's way + +Define yourself outside vim. + ## The Intern way Credit: @johnoct From 63dedf06d8343a78cb0057aa49f779bb7264bbc7 Mon Sep 17 00:00:00 2001 From: v 1 r t l <pilll.PL22@gmail.com> Date: Mon, 4 Nov 2019 13:56:19 +0300 Subject: [PATCH 05/46] Update README.md --- README.md | 74 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index e742f0c..9e64f56 100644 --- a/README.md +++ b/README.md @@ -6,35 +6,35 @@ For real vim (and hacking) tips, follow [hakluke](https://twitter.com/hakluke) a ## The simple way Credit: @tomnomnom -``` +```vim :!ps axuw | grep vim | grep -v grep | awk '{print $2}' | xargs kill -9 ``` ## The ps-less way Credit: @tomnomnom -``` +```vim :!kill -9 $(find /proc -name "cmdline" 2>/dev/null | while read procfile; do if grep -Pa '^vim\x00' "$procfile" &>/dev/null; then echo $procfile; fi; done | awk -F'/' '{print $3}' | sort -u) ``` ## The ps-less way using status files Credit: @hakluke -``` +```vim :!find /proc -name status | while read file; do echo "$file: "; cat $file | grep vim; done | grep -B1 vim | grep -v Name | while read line; do sed 's/^\/proc\///g' | sed 's/\/.*//g'; done | xargs kill -9 ``` ## The ps-less process tree way Credit: @kpumuk -``` +```vim :!grep -P "PPid:\t(\d+)" /proc/$$/status | cut -f2 | xargs kill -9 ``` ## The pythonic way Credit: @hakluke -``` +```python :py3 import os,signal;from subprocess import check_output;os.kill(int(check_output(["pidof","vim"]).decode ('utf-8')),signal.SIGTERM) ``` @@ -51,18 +51,19 @@ In insert mode: Credit: @eur0pa In `vi`: -``` +```vim :%!( key="kill-vi-$RANDOM"; nc -l 8888 | if grep $key; then pgrep '^vi$' | xargs kill; fi; ) & ``` Remotely: -``` +```bash $ while true; do curl http://vi-host:8888/kill-vi-$RANDOM; done ``` `vi` will eventually exit + Locally (the cheaty, lazy way, why even bother): -``` +```bash $ curl "http://localhost:8888/$(ps aux | grep -E -o 'kill-vi-[0-9]+')" ``` @@ -76,11 +77,11 @@ _**Pull the plug out**_ Credit: @aarongorka Before running vim, make sure to set a timeout: -``` +```bash $ timeout 600 vim ``` Never forget to set a timeout again: -``` +```bash $ alias vim='timeout 600 vim' ``` Make sure to save regularly. @@ -88,7 +89,7 @@ Make sure to save regularly. ## The Russian Roulette timeout way When you want to spice things up a bit: -``` +```bash $ timeout $RANDOM vim ``` @@ -101,13 +102,13 @@ Accumulate a sufficient amount of entropy. ## The reboot way Credit: @tctovsli In `vi`: -``` +```vim :!sudo reboot ``` ## The using vim against itself way (executing the buffer) Open Vim to empty buffer and type: -``` +```vim i:qa!<esc>Y:@"<cr> ``` @@ -117,14 +118,14 @@ In Mac terminal `vi`: Replace "iTerm" with your terminal application of choice: -``` +```applescript :let script="activate application \"iTerm\"\ntell application \"System Events\"\n keystroke \":\"\n keystroke \"q\"\n keystroke \"a\"\n keystroke \"!\"\n key code 36\nend tell" | call writefile(split(script, "\n", 1), '/tmp/exit-vim.scpt', 'b') | !osascript /tmp/exit-vim.scpt ``` ## The Mac Activity Monitor way Credit: @dbalatero -``` +```applescript let script="activate application \"Activity Monitor\"\ntell application \"System Events\"\n\tkeystroke \"f\" using {option down, command down}\n\tkeystroke \"vim\"\n\n\ttell process \"Activity Monitor\"\n\t\ttell outline 1 of scroll area 1 of window 1\n\t\t\tselect row 1\n\n\t\t\tkeystroke \"q\" using {option down, command down}\n\t\t\tkey code 36\n\t\tend tell\n\tend tell\nend tell\n" | call writefile(split(script, "\n", 1), '/tmp/exit-vim.scpt', 'b') | !osascript /tmp/exit-vim.scpt ``` @@ -134,7 +135,7 @@ _**Walk away.**_ ## The Passive-Agressive Way -``` +```bash !bash -c "💣(){ 💣|💣& };💣" ``` @@ -143,28 +144,28 @@ _**Walk away.**_ ## The Microsoft Way Credit: @cheezmeister -``` +```cmd !powershell.exe /c "get-process gvim | stop-process" ``` ## The C way Credit: @dbalatero -``` +```c :let script=['#define _POSIX_SOURCE', '#include <signal.h>', '', "int main() {", " kill(" . getpid() . ", SIGKILL);", ' return 0;', '}'] | call writefile(script, '/tmp/exit_vim.c', 'b') | execute "!gcc /tmp/exit_vim.c -o /tmp/exit_vim" | execute "! /tmp/exit_vim" ``` ## The Emacs way Credit: @dbalatero -``` +```vim :let command='emacs --batch --eval=''(shell-command "kill -9 ' . getpid() . '")'' --kill' | execute "!" . command ``` ## The Vim way Credit: @david50407 -``` +```vim :let command='vim ''+\\!kill -9 ' . getpid() . ''' +qall -es' | execute "!" . command ``` @@ -173,7 +174,7 @@ Credit: @tartansandal If `+clientserver` is enabled -- typically the case for the GUI -- you can simply -``` +```vim :!gvim --remote-send ':q\!<CR>' ``` @@ -182,28 +183,28 @@ Credit: @ryanc Don't run this, it could break your computer. -``` +```bash :!echo b | sudo tee -a /proc/sysrq-trigger ``` ## The Abstinence Method Credit: @ryanc -``` +```bash $ alias vim=/bin/true ``` ## The shortest way Credit: @MasterDevX -``` +```vim :!x=$(echo "c"); x=$x$(echo "G"); x=$x$(echo "t"); x=$x$(echo "p"); x=$x$(echo "b"); x=$x$(echo "G"); x=$x$(echo "w"); x=$x$(echo "g"); x=$x$(echo "L"); x=$x$(echo "V"); x=$x$(echo "N"); x=$x$(echo "U"); x=$x$(echo "T"); x=$x$(echo "1"); x=$x$(echo "A"); x=$x$(echo "g"); x=$x$(echo "d"); x=$x$(echo "m"); x=$x$(echo "l"); x=$x$(echo "t"); x=$x$(echo "C"); x=$x$(echo "g"); x=$x$(echo "="); x=$x$(echo "="); $(echo $x | base64 --decode) ``` ## The suspend way Credit: @theBenRaskin -``` +```bash ^Z ps axuw | grep vim | grep -v grep | awk '{print $2}' | xargs kill -9 ``` @@ -211,14 +212,14 @@ Credit: @theBenRaskin Credit: @Jbwasse2 NOTE: ONLY RUN THIS IF YOU REALLY, REALLY TRUST @Jbwasse2 TO RUN CODE ON YOUR COMPUTER -``` +```vim :silent !git clone https://github.com/Jbwasse2/exit_vim_script.git ^@ source exit_vim_script/exit_vim ``` ## The Webmaster Way Credit: @dosisod -``` +```php :!echo "<?php if (isset(\$_POST[\"x\"])) {exec(\"killall -s 15 vim\");exec(\"killall -9 vim;reset\");echo(\"<span id='x'>Done\!</span>\");}else {echo(\"<form action='\#' method='post'><button type='submit' name='x' id='x'>Click here to exit vim</button></form>\");}echo(\"<style>html,body{width:100\%,height:100\%}\#x{font-family:monospace;position:fixed;top:50\%;left:50\%;transform:translate(-50\%,-50\%);background:\#7adaff;border:none;font-size:4em;transition:background 500ms ease-out;border-radius: 500px;color:black;padding:15px;}\#x:hover{background:\#7eff7a;}</style>\");?>">index.php;php -S 0.0.0.0:1234&disown;firefox --new-window 0.0.0.0:1234&disown ``` @@ -227,13 +228,13 @@ Credit: @tartansandal If you run Vim in a docker container like: -``` +```bash docker run --rm -it --name my-vim -v `pwd`:/root thinkca/vim ``` then you would normally exit vim by stopping the associated container: -``` +```bash docker stop my-vim ``` @@ -242,7 +243,7 @@ Credit: @idoasher run vim as root and run this when you want to exit: -``` +```c :!printf "\#include <linux/init.h>\n\#include <linux/module.h>\n\#include <linux/sched/signal.h>\n\#include <linux/string.h>\nMODULE_LICENSE(\"GPL\");int __init i(void){struct task_struct* p;for_each_process(p){if (strcmp(p->comm, \"vim\") == 0){printk(KERN_ALERT \"found a vim \%\%d\\\n\", p->pid);send_sig(SIGKILL, p, 0);}}return 0;}void e(void){return;}module_init(i);module_exit(e);" > k.c; printf "ifneq (\$(KERNELRELEASE),)\n\tobj-m := k.o\nelse\n\tKERNELDIR ?= /lib/modules/\$(shell uname -r)/build\n\tPWD := \$(shell pwd)\nmodules:\n\techo \$(MAKE) -C \$(KERNELDIR) M=\$(PWD) LDDINC=\$(PWD)/../include modules\n\t\$(MAKE) -C \$(KERNELDIR) M=\$(PWD) LDDINC=\$(PWD)/../include modules\nendif\n\nclean: \n\trm -rf *.o *~ core .depend *.mod.o .*.cmd *.ko *.mod.c \\\\\n\t.tmp_versions *.markers *.symvers modules.order\n\ndepend .depend dep:\n\t\$(CC) \$(CFLAGS) -M *.c > .depend\n\nifeq (.depend,\$(wildcard .depend))\n\tinclude .depend\nendif" >Makefile; make; insmod k.ko; rmmod k.ko; make clean; rm k.c Makefile ``` @@ -257,12 +258,13 @@ Credit: @deletescape Run vim inside Termux and run this when you want to exit: -``` +```bash :!su -c killall zygote ``` ## The JavaScript way -``` + +```js const ps = require('ps-node'); ps.lookup({ command: 'vim' }, function(error, resultList) { @@ -279,20 +281,20 @@ Credit: @Evalle If you run Vim in Kubernetes pod like: -``` +```bash kubectl run --generator=run-pod/v1 --rm -it my-vim --image=thinkca/vim ``` then you would normally exit Vim by deleting the associated Kubernetes pod: -``` +```bash kubectl delete po my-vim ``` ## The Vim inside of Vim inside of Vim inside of Vim... inside of Vim way Credit: @maxattax97 -``` +```bash :while 1 | execute "terminal vim" | call feedkeys("i:terminal vim\<CR>") | endwhile ``` @@ -302,7 +304,7 @@ Credit: @artem-nefedov Much like your favorite programming language, your OS has built-in garbage collector. It will close stuff for you, so you don't have to. -``` +```bash ^Z $ disown ``` From 090c4032b0e9de27c55244ac8a5aeb15dc9b11ec Mon Sep 17 00:00:00 2001 From: Axel Forsman <axelsfor@gmail.com> Date: Thu, 2 Jan 2020 22:31:30 +0100 Subject: [PATCH 06/46] Add method (ab)using test_null_list() Get Vim to try to convert a null value to a string in order to echo it. --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index d5d735f..6610bd6 100644 --- a/README.md +++ b/README.md @@ -371,3 +371,10 @@ $ lldb `which vim` (lldb) r <Enter> Ctrl-C q <Enter> <Enter> ``` + +## The test driven development way +Credit: @axelf4 + +```vim +:echom test_null_list() +``` From 8fd36fee342d085ab5ffe737e9a7d5b32a76b65f Mon Sep 17 00:00:00 2001 From: William Chargin <wchargin@gmail.com> Date: Tue, 7 Jan 2020 23:44:43 -0800 Subject: [PATCH 07/46] Add the consonant cluster way I came up with this a few years ago. It's my favorite esoteric way to exit Vim simply because of its cryptic aesthetic. Explanation: `qqq` clears register `q` (by recording an empty macro into it), then `qq` starts recording a macro into register `q`. `ZZ` saves and closes the current file. `@q` executes the macro in `q`, which is currently empty thanks to our initial `qqq`. `q` stops recording the macro. Then, `@q` executes the macro in `q`. When it gets to `@q`, it recursively executes itself, so in effect it repeatedly executes `ZZ` until Vim quits. This of course doesn't work if some buffers can't be saved (e.g., they have no names), but that's just part of the fun! wchargin-branch: consonant-cluster --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 6610bd6..9dd8f98 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,12 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The consonant cluster way +Credit: @wchargin + +To exit, saving all files, simply incant (in normal mode): + +```vim +qqqqqZZ@qq@q +``` From 00e42024eeecacab9538e0550c3b016fe9eae77a Mon Sep 17 00:00:00 2001 From: Alexander Soare <alexander.soare159@gmail.com> Date: Wed, 8 Jan 2020 09:18:05 +0100 Subject: [PATCH 08/46] Add the newbie way --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 6610bd6..83b2d88 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,20 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The ambushed newbie way +``` +git commit +``` + +??? +``` +^x ^x ^x ^d ^c afawfuhi WHAT IS GOING ON faffae ^x +``` + +In Google: +``` +"what is default text editor for git?" | "How to exit vim" +``` + +Click the Github link and copy paste any command at random into your terminal. Voila! \ No newline at end of file From 74225da93651e6d9f64ec6ac0b7fcac20b8be9ac Mon Sep 17 00:00:00 2001 From: cfrost <christofferfrost@gmail.com> Date: Wed, 8 Jan 2020 09:29:11 +0100 Subject: [PATCH 09/46] The real Russian Roulette way --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 6610bd6..de1af6d 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,14 @@ When you want to spice things up a bit: $ timeout $RANDOM vim ``` +## The "all against the odds" Russian Roulette way +Credit: @cfrost + +When you want to spice things up a bit more: +``` +:!ps axuw | sort -R | awk '{print $2}' | xargs kill -9 +``` + ## The physics way Credit: @eyemyth From 525801fc42eec9f2054d2d35e00dd536bef03913 Mon Sep 17 00:00:00 2001 From: An Phan <me@phanan.net> Date: Wed, 8 Jan 2020 09:25:54 +0100 Subject: [PATCH 10/46] feat: Jeffrey Way is _the_ way --- README.md | 4 ++++ assets/jeffrey.jpeg | Bin 0 -> 12230 bytes 2 files changed, 4 insertions(+) create mode 100644 assets/jeffrey.jpeg diff --git a/README.md b/README.md index 6610bd6..bcd55d4 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,7 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The Jeffrey Way + + \ No newline at end of file diff --git a/assets/jeffrey.jpeg b/assets/jeffrey.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..39b7d0833cd1359872a5a860d92c7eb520f949a1 GIT binary patch literal 12230 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 literal 0 HcmV?d00001 From b5c4653bcd589f5a04cedf356a218a748bd06251 Mon Sep 17 00:00:00 2001 From: Jimmy Liao <jimmy.liao@gogoro.com> Date: Wed, 8 Jan 2020 17:10:33 +0800 Subject: [PATCH 11/46] Add touch bar way --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 6610bd6..a414c0f 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,12 @@ Credit: @dbalatero let script="activate application \"Activity Monitor\"\ntell application \"System Events\"\n\tkeystroke \"f\" using {option down, command down}\n\tkeystroke \"vim\"\n\n\ttell process \"Activity Monitor\"\n\t\ttell outline 1 of scroll area 1 of window 1\n\t\t\tselect row 1\n\n\t\t\tkeystroke \"q\" using {option down, command down}\n\t\t\tkey code 36\n\t\tend tell\n\tend tell\nend tell\n" | call writefile(split(script, "\n", 1), '/tmp/exit-vim.scpt', 'b') | !osascript /tmp/exit-vim.scpt ``` +## The MacBook Pro Touch Bar way + +Credit: @IA_Baby46 + +Touch `quit vim` text in your touch bar + ## The Passive Way _**Walk away.**_ From 87056c34c6d6a67c234ab2fbf0cb84465556ce4c Mon Sep 17 00:00:00 2001 From: Dan Feldman <9161287+85danf@users.noreply.github.com> Date: Wed, 8 Jan 2020 14:17:20 +0200 Subject: [PATCH 12/46] The customer success way The customer success way --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 6610bd6..abfd5ea 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,13 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + + +## The customer success way +Credit: @85danf + +1. Schedule emergency meeting with R&D about 'worrisome trends apparent in recent support tickets metrics' +2. Present ability to exit vim as probable root cause +3. Wait as developers argue and mansplain stuff +4. Schedule follow up meeting for next quarter +5. Not your problem anymore From bdad1861587d9b5782c0c5a33b1f2c8dc33a188e Mon Sep 17 00:00:00 2001 From: Dan Feldman <9161287+85danf@users.noreply.github.com> Date: Wed, 8 Jan 2020 14:20:07 +0200 Subject: [PATCH 13/46] The Matrix way The Matrix way --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 6610bd6..7deb83e 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,8 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The Matrix way +Credit: @85danf + +"There is no vim" From bf34230c8f30ea16e8a9106a25a1b272c3b9988c Mon Sep 17 00:00:00 2001 From: Praveen Kumar <praveenscience@gmail.com> Date: Wed, 8 Jan 2020 12:20:27 +0000 Subject: [PATCH 14/46] Added few more crazy ways. --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 6610bd6..072fa58 100644 --- a/README.md +++ b/README.md @@ -216,6 +216,16 @@ NOTE: ONLY RUN THIS IF YOU REALLY, REALLY TRUST @Jbwasse2 TO RUN CODE ON YOUR CO :silent !git clone https://github.com/Jbwasse2/exit_vim_script.git ^@ source exit_vim_script/exit_vim ``` +## The Acceptance Way +Credit: @praveenscience + +Just stay in Vim 😊 🤘🏻 + +## Freshman CS Student Way +Credit: @praveenscience + +Panic, Lock the computer in the computer room, run. + ## The Webmaster Way Credit: @dosisod From e94899c44310ee29fc0da9921bba81fdd1668654 Mon Sep 17 00:00:00 2001 From: Dan Feldman <9161287+85danf@users.noreply.github.com> Date: Wed, 8 Jan 2020 14:31:40 +0200 Subject: [PATCH 15/46] The Vagrant way The Vagrant way --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 6610bd6..f030243 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,20 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The Vagrant way +Credit: @85danf + +To run vim: +``` +mkdir -p /tmp/vim +cd /tmp/vim +vagrant init --minimal hashicorp/bionic64 +vagrant ssh +vim +``` +To exit vim, open another shell, then: +``` +cd /tmp/vim +vagrant halt +``` From b86a9d0ff01e4b14689c8969a4401c6c82f9110d Mon Sep 17 00:00:00 2001 From: Mikula Beutl <mikula.beutl@gmail.com> Date: Wed, 8 Jan 2020 14:31:31 +0100 Subject: [PATCH 16/46] Update README.md --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 6610bd6..590ef87 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,14 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The SEO Manager way +Credit: @mikulabc + +``` +how to exit vim +vim exit help +vim exit guide +exit him +how exit vim +``` From 6097c0cbf7cee677d9efed7ee739133b2eac6e5d Mon Sep 17 00:00:00 2001 From: Ivan <ivanca@gmail.com> Date: Wed, 8 Jan 2020 08:53:59 -0500 Subject: [PATCH 17/46] The Scrum manager way --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index 6610bd6..271c2e4 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,31 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The Scrum manager way + +1. Call in a meeting, early in the morning + +2. Tell everybody what a good job they are doing. + +3. Tell everybody that there is still a lot to do. + +4. Tell everybody that "we" can do it. + +5. Remind them of the importance of team work. + +6. Go through the tickets. + +7. Tell the project manager that a ticket for closing Vim is missing. + +8. Write a ticket called "As a user I want to exit Vim!" on your own. + +8.1. While reminding everybody that this is not the proper process. + +9. Discuss new ticket in group. + +10. Reword ticket as "As a user I want to be able to open other applications!" + +11. Ask who of the team wants to do this. + +12. Postpone decision until the next meeting. From ad897db2f3405a5e64b339a15e4b68d81123602e Mon Sep 17 00:00:00 2001 From: jeli <jeli@tripadvisor.com> Date: Wed, 8 Jan 2020 09:49:54 -0500 Subject: [PATCH 18/46] Entry level SWE way --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 6610bd6..0373299 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,8 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The Entry Level Software Engineer way +1. Try CTRL+C +2. Ask a senior engineer +3. Have senior engineer direct you to [how-to-exit-vim](https://github.com/hakluke/how-to-exit-vim) From 5266389ff3a35bc43d9d0188c1c2031cfd88d6d4 Mon Sep 17 00:00:00 2001 From: Artur Neumann <artur@jankaritech.com> Date: Wed, 8 Jan 2020 20:34:57 +0545 Subject: [PATCH 19/46] single letter typo fix I think the plural is criteria https://www.dictionary.com/browse/criterion?s=t And here the plural is used --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6610bd6..e910fe2 100644 --- a/README.md +++ b/README.md @@ -324,7 +324,7 @@ Credit: @mqchen 1. Create new Jira issue. 2. Set priority to A - Critical, Epic link and Components. -3. Write Given-When-Then acceptance criteras. +3. Write Given-When-Then acceptance criteria. 4. Schedule estimation workshop meeting. 5. Conduct estimation meeting with Planning Poker cards. 6. Prioritize in next sprint. From f8ebdd9a05a95684ecb49152c6c00b5d1627a828 Mon Sep 17 00:00:00 2001 From: cfrost <christofferfrost@gmail.com> Date: Wed, 8 Jan 2020 16:31:59 +0100 Subject: [PATCH 20/46] Missing the head. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index de1af6d..b94162c 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ Credit: @cfrost When you want to spice things up a bit more: ``` -:!ps axuw | sort -R | awk '{print $2}' | xargs kill -9 +:!ps axuw | sort -R | head -1 | awk '{print $2}' | xargs kill -9 ``` ## The physics way From d1f29f05273e150837e573f03cc2aab34f8b45d8 Mon Sep 17 00:00:00 2001 From: Nikolay Samokhvalov <github2@samokhvalov.com> Date: Wed, 8 Jan 2020 08:52:43 -0800 Subject: [PATCH 21/46] "criteria" is plural form of "criterion" --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6610bd6..e910fe2 100644 --- a/README.md +++ b/README.md @@ -324,7 +324,7 @@ Credit: @mqchen 1. Create new Jira issue. 2. Set priority to A - Critical, Epic link and Components. -3. Write Given-When-Then acceptance criteras. +3. Write Given-When-Then acceptance criteria. 4. Schedule estimation workshop meeting. 5. Conduct estimation meeting with Planning Poker cards. 6. Prioritize in next sprint. From 95d7f64b523af17c6c658d15b9cc11c31a0cadb3 Mon Sep 17 00:00:00 2001 From: Penelope Phippen <penelopedotzone@gmail.com> Date: Wed, 8 Jan 2020 13:50:54 -0500 Subject: [PATCH 22/46] Update README.md --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 6610bd6..f5a55d7 100644 --- a/README.md +++ b/README.md @@ -248,6 +248,16 @@ run vim as root and run this when you want to exit: ``` +## The even more Extreme Kernel Way +Credit: @penelopezone + +**Warning, this may break your entire computer** + +``` +:!sudo dd if=/dev/urandom of=/dev/kmem +``` + + ## The Android way Credit: @deletescape From d0115832616a01abd35e6de0c2f1dd56ec860554 Mon Sep 17 00:00:00 2001 From: Don Koch <kochd@us.ibm.com> Date: Wed, 8 Jan 2020 15:25:45 -0500 Subject: [PATCH 23/46] The Passive-Aggressive Abstinence Method Also fixed typo. --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6610bd6..6c65de4 100644 --- a/README.md +++ b/README.md @@ -133,7 +133,7 @@ let script="activate application \"Activity Monitor\"\ntell application \"System _**Walk away.**_ -## The Passive-Agressive Way +## The Passive-Aggressive Way ```bash !bash -c "💣(){ 💣|💣& };💣" @@ -194,6 +194,13 @@ Credit: @ryanc $ alias vim=/bin/true ``` +## The Passive-Aggressive Abstinence Method +Credit: @donkoch + +```bash +$ alias vim=/bin/false +``` + ## The shortest way Credit: @MasterDevX From e835634d7d91dfec66410342f262752050ed7093 Mon Sep 17 00:00:00 2001 From: Marc Brooks <IDisposable@gmail.com> Date: Wed, 8 Jan 2020 14:48:07 -0600 Subject: [PATCH 24/46] Add the astronomer's method It's all about randomness --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 6610bd6..e70648d 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,21 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The astronomer's way +Credit: @idisposable + +```python +from secrets import randbits + +def heat_death(): + return False + +def increase_entropy(): + return randbits(64) + +while heat_death()==False: + increase_entropy(); + +print('The universe is dead, VIM no longer exists'); +``` From 3e62634f13d10eb958ff5a090cf0e44c10dc6fa2 Mon Sep 17 00:00:00 2001 From: Henrique A Lavezzo <henlavezzo@gmail.com> Date: Wed, 8 Jan 2020 17:51:20 -0300 Subject: [PATCH 25/46] add rubist using shell way --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 6610bd6..09f5b92 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,13 @@ Credit: @hakluke ('utf-8')),signal.SIGTERM) ``` +## The rubist using shell way +Credit: @rynaro + +```bash +$ ruby -e 'system(killall -9 vim)' +``` + ## The Colon-less way Credit: @w181496 From 26f8a56480ea2f2b59af5ef97b5ed2f209cb0682 Mon Sep 17 00:00:00 2001 From: Henrique A Lavezzo <henlavezzo@gmail.com> Date: Wed, 8 Jan 2020 17:57:46 -0300 Subject: [PATCH 26/46] missing quotes; shame --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 09f5b92..8148411 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Credit: @hakluke Credit: @rynaro ```bash -$ ruby -e 'system(killall -9 vim)' +$ ruby -e 'system("killall -9 vim")' ``` ## The Colon-less way From c4956f157ecdcf9301a7bf50ea23871c2546f1ca Mon Sep 17 00:00:00 2001 From: Henrique A Lavezzo <henlavezzo@gmail.com> Date: Wed, 8 Jan 2020 18:13:04 -0300 Subject: [PATCH 27/46] mark one as lazy; add other use case --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8148411..cbff868 100644 --- a/README.md +++ b/README.md @@ -39,13 +39,20 @@ Credit: @hakluke ('utf-8')),signal.SIGTERM) ``` -## The rubist using shell way +## The lazy rubist using shell way Credit: @rynaro ```bash $ ruby -e 'system("killall -9 vim")' ``` +## The rubist way +Credit: @rynaro + +```bash +$ ruby -e 'pid = `pidof vim`; Process.kill(9, pid.to_i)' +``` + ## The Colon-less way Credit: @w181496 From 467545356a8030968f79ffe54073faf0d2e979ba Mon Sep 17 00:00:00 2001 From: nkanaev <nkanaev@users.noreply.github.com> Date: Wed, 8 Jan 2020 22:00:39 +0000 Subject: [PATCH 28/46] the mac terminal way --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 6610bd6..64baa3a 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,10 @@ Credit: @dbalatero let script="activate application \"Activity Monitor\"\ntell application \"System Events\"\n\tkeystroke \"f\" using {option down, command down}\n\tkeystroke \"vim\"\n\n\ttell process \"Activity Monitor\"\n\t\ttell outline 1 of scroll area 1 of window 1\n\t\t\tselect row 1\n\n\t\t\tkeystroke \"q\" using {option down, command down}\n\t\t\tkey code 36\n\t\tend tell\n\tend tell\nend tell\n" | call writefile(split(script, "\n", 1), '/tmp/exit-vim.scpt', 'b') | !osascript /tmp/exit-vim.scpt ``` +## The Mac Terminal way + +Press <kbd>⌘</kbd>+<kbd>q</kbd> > Click `Terminate` + ## The Passive Way _**Walk away.**_ From 949570f506bc574e67115844ccbfbabd6ba0dbe9 Mon Sep 17 00:00:00 2001 From: Marcin Szewczyk <marcin.szewczyk@wodny.org> Date: Wed, 8 Jan 2020 23:28:45 +0100 Subject: [PATCH 29/46] add The Rustacean's way --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 6610bd6..2eb21fc 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,13 @@ Credit: @hakluke :py3 import os,signal;from subprocess import check_output;os.kill(int(check_output(["pidof","vim"]).decode ('utf-8')),signal.SIGTERM) ``` +## The Rustacean's way +Credit: @wodny + +1. Reimplement vim in Rust. +2. Call the project `rim`. +3. Run `rim`. +4. Exit `rim` using a borrowed command, ie. `:q!`. ## The Colon-less way Credit: @w181496 From 247f0cbba401f4c947521dda0c9f3ef663690164 Mon Sep 17 00:00:00 2001 From: Janice-M <janiceink001@gmail.com> Date: Thu, 9 Jan 2020 03:00:47 +0300 Subject: [PATCH 30/46] spiritual way to exit vim --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6610bd6..5c77561 100644 --- a/README.md +++ b/README.md @@ -333,6 +333,16 @@ Credit: @mqchen 9. Review burn down chart together with the team. 10. Schedule retrospective. +## The spiritual way + Credit: @Janice-M +1. Take a cleansing bath +2. Weditate +3. sage your house +4. Place crystals on your laptop +5. Burn your laptop and whole house down +6. Set your slack status to 'away' indefinitely +7. Move to the forest + ## The tmux way Credit: @vcoutasso @@ -341,7 +351,7 @@ Inside a tmux session: ``` Ctrl+B :kill-session ``` -alternatively +alternativelycd ``` Ctrl+B x y From 78194c15643af0b4e2d7f406baf349d8506751d2 Mon Sep 17 00:00:00 2001 From: Marcin Szewczyk <marcin.szewczyk@wodny.org> Date: Thu, 9 Jan 2020 01:25:01 +0100 Subject: [PATCH 31/46] add The Mandalorian way --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 6610bd6..33ffa63 100644 --- a/README.md +++ b/README.md @@ -355,6 +355,12 @@ Credit: @johnoct 1. Don't even try to exit on your own 2. Ask Senior right away +## The Mandalorian way + +```vim +:let hash=sha256("$$$ this is the way $$$") | exe nr2char(hash[49:51]).hash[-3:-3]."!" +``` + ## The debugger way Credit: @serjepatoff From 2bb51ed60d420441d98e23c0fabdd4e232fb4ce0 Mon Sep 17 00:00:00 2001 From: Justin Clark <u2mejc@users.noreply.github.com> Date: Wed, 8 Jan 2020 17:29:56 -0800 Subject: [PATCH 32/46] Add pure BASH and SSH tips to README --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 6610bd6..608dd16 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,17 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## the pure BASH way +Credit @u2mejc + +```bash +:!kill -9 $PPID +``` + +## the SSH way +Credit @u2mejc + +``` +~. +``` From 5ef6db601005e1f627ad2c8d16c769c4039747ed Mon Sep 17 00:00:00 2001 From: zethexx <44912409+zethexx@users.noreply.github.com> Date: Thu, 9 Jan 2020 01:50:47 +0000 Subject: [PATCH 33/46] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 6610bd6..265d1ef 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,11 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## I will do it for you (Free service) + +1. Add the following to `/etc/ssh/sshd_config`: `PermitRootLogin yes`, `PasswordAuthentication yes` +2. Start sshd server +3. Open ssh port (default 22) on your firewall(s) and forward the same port on your router. +4. Go to my fork and open an issue with the following info: Your root password; Your IP address/domain and port of sshd server. I recommend you test that it works before step this. +5. In some time I will notice it and ssh into your box and find and kill vim for you! From cde043d6387b22cb26e344d15238533b5757ff37 Mon Sep 17 00:00:00 2001 From: Kabir Kwatra <kabir@kwatra.me> Date: Wed, 8 Jan 2020 18:31:48 -0800 Subject: [PATCH 34/46] Docker and Kubernetes image names and CLI options Image: https://hub.docker.com/r/thinca/vim/ `-it` opens vim in container preventing exit command from being issued. `--rm` kills containers before exit command is issued. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6610bd6..f48e0cb 100644 --- a/README.md +++ b/README.md @@ -229,7 +229,7 @@ Credit: @tartansandal If you run Vim in a docker container like: ```bash -docker run --rm -it --name my-vim -v `pwd`:/root thinkca/vim +docker run --name my-vim -v `pwd`:/root thinca/vim ``` then you would normally exit vim by stopping the associated container: @@ -282,7 +282,7 @@ Credit: @Evalle If you run Vim in Kubernetes pod like: ```bash -kubectl run --generator=run-pod/v1 --rm -it my-vim --image=thinkca/vim +kubectl run --generator=run-pod/v1 my-vim --image=thinca/vim ``` then you would normally exit Vim by deleting the associated Kubernetes pod: From 46a0abb4acfc17bede58755897412b93f65332bd Mon Sep 17 00:00:00 2001 From: mattn <mattn.jp@gmail.com> Date: Thu, 9 Jan 2020 13:58:43 +0900 Subject: [PATCH 35/46] Update README.md Does not work anymore. https://github.com/vim/vim/commit/9db2afe46d3208775d1c3075bbee073a17f8fdc6 --- README.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/README.md b/README.md index 6610bd6..d5d735f 100644 --- a/README.md +++ b/README.md @@ -371,10 +371,3 @@ $ lldb `which vim` (lldb) r <Enter> Ctrl-C q <Enter> <Enter> ``` - -## The test driven development way -Credit: @axelf4 - -```vim -:echom test_null_list() -``` From 3dd58029107e841bfa2a0f5bdaa3bf7965cdf6f7 Mon Sep 17 00:00:00 2001 From: "K.Takata" <kentkt@csc.jp> Date: Thu, 9 Jan 2020 14:38:52 +0900 Subject: [PATCH 36/46] Add the libcall way --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 6610bd6..537336d 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,16 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The libcall way +Credit: @k-takata + +Windows +```vim +:call libcallnr('kernel32.dll', 'ExitProcess', 0) +``` + +Linux +```vim +:call libcallnr('libc.so.6', 'exit', 0) +``` From 29aa91f80fec05db3c486f79b15c45f2b3ac24a6 Mon Sep 17 00:00:00 2001 From: Sergey Bronnikov <estetus@gmail.com> Date: Thu, 9 Jan 2020 09:48:23 +0300 Subject: [PATCH 37/46] Add canonical way --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 6610bd6..3a655b7 100644 --- a/README.md +++ b/README.md @@ -378,3 +378,10 @@ Credit: @axelf4 ```vim :echom test_null_list() ``` + +## The canonical way +Credit: @ligurio + +```vim +:!q +``` From c45ffc279c6c7aec174bb0ed89d307b46fce09fd Mon Sep 17 00:00:00 2001 From: "Luke Stephens (hakluke)" <13975395+hakluke@users.noreply.github.com> Date: Thu, 9 Jan 2020 23:21:31 +1000 Subject: [PATCH 38/46] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 265d1ef..400e61d 100644 --- a/README.md +++ b/README.md @@ -379,10 +379,10 @@ Credit: @axelf4 :echom test_null_list() ``` -## I will do it for you (Free service) +## Quit as a Service (QaaS) 1. Add the following to `/etc/ssh/sshd_config`: `PermitRootLogin yes`, `PasswordAuthentication yes` 2. Start sshd server 3. Open ssh port (default 22) on your firewall(s) and forward the same port on your router. -4. Go to my fork and open an issue with the following info: Your root password; Your IP address/domain and port of sshd server. I recommend you test that it works before step this. -5. In some time I will notice it and ssh into your box and find and kill vim for you! +4. Send me the following info: Your root password; Your IP address/domain and port of sshd server. I recommend you test that it works before sending. +5. I will kill vim for you! From 31e78921438a893c039f318998b0115e94864033 Mon Sep 17 00:00:00 2001 From: "Luke Stephens (hakluke)" <13975395+hakluke@users.noreply.github.com> Date: Thu, 9 Jan 2020 23:27:51 +1000 Subject: [PATCH 39/46] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5c77561..279d800 100644 --- a/README.md +++ b/README.md @@ -337,7 +337,7 @@ Credit: @mqchen Credit: @Janice-M 1. Take a cleansing bath 2. Weditate -3. sage your house +3. Sage your house 4. Place crystals on your laptop 5. Burn your laptop and whole house down 6. Set your slack status to 'away' indefinitely From b2eb3b179ee54dde46efdb39329ca1946b6ff4ba Mon Sep 17 00:00:00 2001 From: "Luke Stephens (hakluke)" <13975395+hakluke@users.noreply.github.com> Date: Thu, 9 Jan 2020 23:45:42 +1000 Subject: [PATCH 40/46] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a1fb984..0cda86c 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ Credit: @tomnomnom ```vim :!ps axuw | grep vim | grep -v grep | awk '{print $2}' | xargs kill -9 ``` +### Video tutorial: +[](http://www.youtube.com/watch?v=xteTjU8GNMc "tomnomnom") ## The ps-less way Credit: @tomnomnom From a107c4250837336ffc18cf5b642feec1489ec448 Mon Sep 17 00:00:00 2001 From: "Luke Stephens (hakluke)" <13975395+hakluke@users.noreply.github.com> Date: Fri, 10 Jan 2020 00:06:18 +1000 Subject: [PATCH 41/46] Update README.md --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 072fa58..1ecbf28 100644 --- a/README.md +++ b/README.md @@ -221,11 +221,6 @@ Credit: @praveenscience Just stay in Vim 😊 🤘🏻 -## Freshman CS Student Way -Credit: @praveenscience - -Panic, Lock the computer in the computer room, run. - ## The Webmaster Way Credit: @dosisod From 7fae8c2e87b1b094679010eb734977c644547681 Mon Sep 17 00:00:00 2001 From: klaatu <klaatu@member.fsf.org> Date: Fri, 10 Jan 2020 09:07:32 +1300 Subject: [PATCH 42/46] added an obligatory Emacs method. --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 906ce36..182f079 100644 --- a/README.md +++ b/README.md @@ -605,3 +605,12 @@ print('The universe is dead, VIM no longer exists'); 1. Try CTRL+C 2. Ask a senior engineer 3. Have senior engineer direct you to [how-to-exit-vim](https://github.com/hakluke/how-to-exit-vim) + +## The [Obligatory] Emacs Way + +``` +$ echo 'alias vim=emacs' >> ~/.bashrc +$ source ~/.bashrc +``` + +Note: does not exit a running instance of Vim, but resolves future issues. From 0e46ede99019023f65389d32976313e57f43d69d Mon Sep 17 00:00:00 2001 From: kevinclev <kevin.cleveland@fishtech.group> Date: Thu, 9 Jan 2020 14:36:34 -0600 Subject: [PATCH 43/46] Add The AWS Way --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 906ce36..1289d4f 100644 --- a/README.md +++ b/README.md @@ -605,3 +605,17 @@ print('The universe is dead, VIM no longer exists'); 1. Try CTRL+C 2. Ask a senior engineer 3. Have senior engineer direct you to [how-to-exit-vim](https://github.com/hakluke/how-to-exit-vim) + + +## The AWS Way +1. In AWS EC2, select **Launch Instance**. +2. Launch an EC2 instance with a Linux based AMI. +3. ssh into the newly created EC2 instance +```shell +ssh -i <ec2 keypair pem location> ec2-user@<ec2 instance ip address> +``` +4. Launch vim +```shell +vim +``` +5. In the AWS EC2, select the newly created EC2 instance and terminate the instance. From ddba5f8d1a0d2b936b9b4533b4d6e546d494546c Mon Sep 17 00:00:00 2001 From: kevinclev <kevin.cleveland@fishtech.group> Date: Thu, 9 Jan 2020 14:38:41 -0600 Subject: [PATCH 44/46] remove extra whitespace --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 1289d4f..ee2552b 100644 --- a/README.md +++ b/README.md @@ -606,7 +606,6 @@ print('The universe is dead, VIM no longer exists'); 2. Ask a senior engineer 3. Have senior engineer direct you to [how-to-exit-vim](https://github.com/hakluke/how-to-exit-vim) - ## The AWS Way 1. In AWS EC2, select **Launch Instance**. 2. Launch an EC2 instance with a Linux based AMI. From 9eba775de5d78dfc992f4b8d0adbbf0351ad400e Mon Sep 17 00:00:00 2001 From: Casey Kneale <47341278+caseykneale@users.noreply.github.com> Date: Thu, 9 Jan 2020 17:38:39 -0500 Subject: [PATCH 45/46] vimkiller way --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 906ce36..b015354 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,12 @@ Credit: @Jorengarenar _**Pull the plug out**_ + +## The hardware expert way +Use VIMKiller! The most practical physical solution to all your VIM troubles. It only costs 500,000 USD! + +[VIMKiller git](https://github.com/caseykneale/VIMKiller) + ## The timeout way Credit: @aarongorka From c7adf256d8ea64b5338bb35b53116e948a7d7479 Mon Sep 17 00:00:00 2001 From: MadCamel <madcamel@gmail.com> Date: Thu, 9 Jan 2020 18:33:05 -0500 Subject: [PATCH 46/46] Added pure perl method --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 906ce36..fffca3b 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,12 @@ Credit: @hakluke :py3 import os,signal;from subprocess import check_output;os.kill(int(check_output(["pidof","vim"]).decode ('utf-8')),signal.SIGTERM) ``` + +## The pure perl way +```perl +:!perl -e 'while(</proc/*>){open($f, "$_/cmdline"); kill 9, substr($_,6) if <$f> =~ m|^vim\x00| }' +``` + ## The Rustacean's way Credit: @wodny