how-to-exit-vim/README.md
Luke Stephens (hakluke) 3b912c3be8
Update README.md
2019-09-27 07:47:44 +10:00

119 lines
3.1 KiB
Markdown

# How to exit vim
Below are some simple methods for exiting vim.
## The simple way
Credit: @tomnomnom
```
:!ps axuw | grep vim | grep -v grep | awk '{print $2}' | xargs kill -9
```
## The ps-less way
Credit: @tomnomnom
```
:!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
```
:!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 pythonic way
Credit: @hakluke
```
:py3 import os,signal;from subprocess import check_output;os.kill(int(check_output(["pidof","vim"]).decode
('utf-8')),signal.SIGTERM)
```
## The remote way
Credit: @eur0pa
In `vi`:
```
:%!( key="kill-vi-$RANDOM"; nc -l 8888 | if grep $key; then pgrep '^vi$' | xargs kill; fi; ) &
```
Remotely:
```
$ while true; do curl http://vi-host:8888/kill-vi-$RANDOM; done
```
`vi` will eventually exit
Locally (the cheaty, lazy way, why even bother):
```
$ curl "http://localhost:8888/$(ps aux | grep -E -o 'kill-vi-[0-9]+')"
```
## The hardware way
Credit: @Jorengarenar
_**Pull the plug out**_
## The timeout way
Credit: @aarongorka
Before running vim, make sure to set a timeout:
```
$ timeout 600 vim
```
Never forget to set a timeout again:
```
$ alias vim='timeout 600 vim'
```
Make sure to save regularly.
## The Russian Roulette timeout way
When you want to spice things up a bit:
```
$ timeout $RANDOM vim
```
## The physics way
Credit: @eyemyth
Accumulate a sufficient amount of entropy.
## The reboot way
Credit: @tctovsli
In `vi`:
```
:!sudo reboot
```
## The using vim against itself way (executing the buffer)
Open Vim to empty buffer and type:
```
i:qa!<esc>Y:@"<cr>
```
## The AppleScript way
Credit: @dbalatero
In Mac terminal `vi`:
Replace "iTerm" with your terminal application of choice:
```
: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
```
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 C way
Credit: @dbalatero
```
: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"
```