# 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!Y:@" ``` ## 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 ```