5

whenever I run a python program from vim command like this:

:!python foo.py

after running the program, vim will stop and say this:

[1]+  Stopped                 vim foo.py

I don't know why there is such an error. I don't use the foo.py file in other application, but it just happened.

In case you need, this is my .exerc file contents:

set nu
syntax on
filetype on
filetype indent on
filetype plugin on
set tabstop=4
set shiftwidth=4
set softtabstop=4
set shellcmdflag=-ic

when I open the foo.py after running it, vim says this:

E325: ATTENTION
Found a swap file by the name ".foo.py.swp"
          owned by: me   dated: Mon Sep 30 21:05:52 2013
         file name: ~foo/bar/foo.py
          modified: no
         user name: me   host name: hostname
        process ID: 3635 (still running)
While opening file "foo.py"
             dated: Sat Sep 28 23:04:15 2013

(1) Another program may be editing the same file.
    If this is the case, be careful not to end up with two
    different instances of the same file when making changes.
    Quit, or continue with caution.

(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r foo.py"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".foo.py.swp"
    to avoid this message.

Swap file ".foo.py.swp" already exists!

Thank you. ( I am using mac os x )

SamuraiT
  • 992
  • 3
  • 12
  • 31

2 Answers2

5

Saying:

set shellcmdflag=-ic

causes vim to open an interactive shell upon trying to execute a shell command.

In order to open an interactive shell, it suspends the vim process. That explains the behaviour (both [1]+ Stopped ... and Found a swap file ...) you're observing.

(You can say fg to resume the editor from the shell thus created.)

If you remove

set shellcmdflag=-ic

from your .exerc, you wouldn't observe this issue.

devnull
  • 118,548
  • 33
  • 236
  • 227
  • Yes! after commenting out the line, vim functions well. However, I made user-defined command on .bashrc file. and I wanted to use the command from vim, that's why I added the line. still, I'd like to use the command I defined, so what should I do for that ? could you please tell me how ? – SamuraiT Sep 30 '13 at 12:31
  • Use shell scripts instead of aliases. – romainl Sep 30 '13 at 12:33
  • @SamuraiT Moreover, you can refer to the current file by `%`. If you're editing `foo.py`, then instead of saying `:!python foo.py` you could say `:!python %`. – devnull Sep 30 '13 at 12:34
  • wow, I didn't now that I can refer to the current file by %. Thank you ! – SamuraiT Sep 30 '13 at 12:36
  • @SamuraiT It's not very clear what you're asking. Either edit the above question to add what you're asking, or add a new question if you think that it's a different discussion. – devnull Sep 30 '13 at 12:39
  • @devnull ok I am sorry, it was the different question. I created a command(easytex) on .bashrc file. and for being able to use the command from vim, I added `set shellcmdflag=-ic` on .exrc file. and what I meant was, is there other way I can use the command from vim since `set shellcmdflag=-ic` makes a problem for me. – SamuraiT Sep 30 '13 at 12:54
  • other than run a shell script. *I created the easytex command for compiling tex files easier. – SamuraiT Sep 30 '13 at 12:56
  • @SamuraiT It's possible to use `map`. – devnull Sep 30 '13 at 13:10
  • thank you very much! I learned a lot of things by a few minutes! – SamuraiT Sep 30 '13 at 13:33
2

In order to execute your python script, Vim must be suspended so that the script can be run in your shell.

What you see is not an error, it's your shell helpfully telling you that Vim is suspended (or "backgrounded" or "in the background" or… "stopped"). and that it's apparently the first and only program to be suspended.

To get back to Vim, just type fg (for foreground) at the prompt.

So, basically, what you get is both normal and expected.

romainl
  • 186,200
  • 21
  • 280
  • 313