neoterm

Wrapper of some vim/neovim's :terminal functions.

Github星跟蹤圖

neoterm

__   _ _______  _____  _______ _______  ______ _______, \, ______, ______, _____/, \_, ______, _____, ______, \_, ```


Use the same terminal for everything. The main reason for this plugin is to
reuse the terminal easily. All commands open a terminal if one does not already
exist. REPL commands open a terminal and the proper REPL if not already opened.

- Neovim/Vim terminal helper functions/commands.
- Wraps REPLs to receive current file, line or selection.
- Multiple terminal support:
 - ![many-terms](https://cloud.githubusercontent.com/assets/120483/8921869/fe459572-34b1-11e5-93c9-c3b6f3b44719.gif)

## Installation

### Vundle/Plug.vim/minpac/any other

You can install this plugin using any vim plugin manager by using the path on
GitHub for this repository:

```vim
[Plugin, Plug, ...] 'kassio/neoterm'

See the your plugin manager documentation for more information.

Manual

For installation without a package manager, you can clone this Git repository
into a bundle directory as with pathogen, and add the repository to your
runtime path yourself. First clone the repository:

cd ~/.vim/bundle
git clone https://github.com/kassio/neoterm.git

Then, modify your ~/.vimrc file to add this plugin to your runtime path:

set nocompatible
filetype off

let &runtimepath.=',~/.vim/bundle/neoterm'

filetype plugin on

You can add the following line to generate documentation tags automatically,
if you don't have something similar already, so you can use the :help command
to consult neoterm's online documentation:

silent! helptags ALL

Windows

For Windows users, replace usage of the Unix ~/.vim directory with
%USERPROFILE%\_vim, or another directory if you have configured
Vim differently. On Windows, your ~/.vimrc file will be similarly
stored in %USERPROFILE%\_vimrc.

test libs (removed on 05/Feb/2017)

This feature was removed on 05/Feb/2017, please consider using vim-test with
neoterm strategy to replace this feature.

REPL

  • TREPLSendFile: sends the current file to a REPL in a terminal.
  • TREPLSendLine: sends the current line to a REPL in a terminal.
  • TREPLSendSelection: sends the selection to a REPL in a terminal.
  • <Plug>(neoterm-repl-send): sends with text-objects or motions, or sends the
    selection to a REPL in a terminal.
  • <Plug>(neoterm-repl-send-line): sends the current line to a REPL in a
    terminal.

Supported REPLs

  • Clojure: lein repl
  • Elixir: iex and iex -S mix (if config/config.exs exists)
  • GNU Octave: octave
    • For Octave 4.0.0 and later, you can enable Qt widgets (dialogs, plots, etc.)
      using g:neoterm_repl_octave_qt = 1
  • Haskell: ghci
  • Idris: idris
  • JavaScript: node
  • Julia: julia
  • LFE: lfe
  • Lua with lua and luap.
  • MATLAB: matlab -nodesktop -nosplash
  • PARI/GP: gp
  • PHP: g:neoterm_repl_php and psysh and php
  • Python: ipython and python
  • R / R Markdown: R
  • Racket: racket
  • Rails: bundle exec rails console
  • Ruby: pry and irb
  • SML: rlwrap sml or sml
  • Scala: sbt console
  • TCL: tclsh

Troubleshooting

Most standard file extensions for the above REPLs are picked up by Neovim/Vim's
default filetype plugins. However, there are two exceptions:

  • Julia .jl files, which are detected as filetipe=lisp
  • Idris .idr, .lidr files which are not recognised as any filetype
  • LFE .lfe files, which are not recognized as any filetype

To fix this, either install a suitable plugin for the language or add something like
the following to your init.vim:

au VimEnter,BufRead,BufNewFile *.jl set filetype=julia
au VimEnter,BufRead,BufNewFile *.idr set filetype=idris
au VimEnter,BufRead,BufNewFile *.lidr set filetype=lidris
au VimEnter,BufRead,BufNewFile *.lfe, set filetype=lfe

Other useful commands

  • :T {command}: Opens a terminal, or use an opened terminal, and runs the
    given command within a terminal.
  • :Tmap {command}: maps a the given command to ,tt.

Dynamic commands

  • :3T {command}: Will send the command to neoterm-3.

useful mappings:

I like to set some mappings to make me more productive.

" 3<leader>tl will clear neoterm-3.
nnoremap <leader>tl :<c-u>exec v:count.'Tclear'<cr>

Contributing

Open a pull request to add REPLs and other features to this plugin. :smiley:

Changelog

  • 11/11/2019
    • Fix bug with g:neoterm_fixedsize. (#255)
  • 07/11/2019
    • Remove TermClose neoterm destroy action. This is already called via
      on_exit callback. (#252)
    • Fix neoterm on vim. Vim doesn't accept marked shell.
      (#251)
    • Fix exception when trying to send a command to an inexistent neoterm buffer.
      (#254)
  • 01/09/2019
    • Use a proper terminal marker for each OS. Unix-like uses ;#neoterm and
      windows uses &::neoterm. (Same strategy used on
      FZF) (#246)
  • 20/08/2019
    • Destroy managed neoterm buffer loaded from session
    • Refactor the neoterm target function, the function the retrieves the desired
      neoterm to act on, to its own autoload function set (neoterm#target#).
    • Only manage neoterm terminals with TermOpen. (#243)
  • 19/08/2019
    • Only use TermOpen when it' available. (#243)
  • 18/08/2019
    • Enable neoterm to manage any terminal buffer. The TermOpen event is being
      used to associate neovim terminal with neoterm.
    • Remove deprecated g:neoterm_open_in_all_tabs and fix
      g:neoterm_term_per_tab (#237).
    • Better message when trying to execute a command on an already closed
      neoterm. Instead of show the error stacktrace just shows the message:
      "neoterm-X not found (probably already closed)" (#242)
  • 21/06/2019
    • Fix bug with window resizing for non-default mods (#239).
  • 07/06/2019
    • g:neoterm_keep_term_open keeps hidden terminals open even if they are
      closed without using :Tclose
  • 11/03/2019
    • Make the signcolumn=auto in neoterm buffer.
  • 29/01/2019
    • Improve g:neoterm_open_in_all_tabs documentation.
  • 21/12/2018
    • Add g:neoterm_term_per_tab, a way to send the commands to the term
      associated to the vim tab.
    • fix :Topen without g:neoterm_default_mod wasn't re-opening neoterm
      buffer.
  • 17/11/2018
    • add :Tclear!, this will clear the neoterm buffer scrollback (history)
  • 12/11/2018
    • Use chansend instead of jobsend, which was deprecated.
  • 12/11/2018
    • Fix E119: Not enough arguments for function: <SNR>112_repl_result_handler
  • 09/11/2018
    • Yet another work with '%' expandability.
      • '%' will be expanded to the current file path, respect g:neoterm_use_relative_path;
      • '%' will be expanded to '%', not the current file path, useful in Windows.
  • 20/07/2018
    • \% Will not expand the %. (Escaping the %)
  • 03/03/2018
    • DEPRECATE g:neoterm_split_on_tnew - :Tnew now accepts vim mods (:help mods).
    • Introduce g:neoterm_tnew_mod to set a default :Tnew mod (:help mods).
    • Revamp :Topen. Now :[mods][N]Topen accepts vim mods (:h mods) and a
      target, so if one wants to open the neoterm with id 2 in vertical, one can
      do :vert 2Topen.
    • Revamp :Tclose. Now :[N]Tclose[!] accepts a target, so one can close any
      neoterm by its id.
    • Fix a bug with :[N]Ttoggle and also make it accepts the neoterm id.
  • 04/03/2018
    • Revamp :[N]Ttoggle, now it accepts vim mods (:help mods) when the toggle
      is opening the neoterm.
    • Revamp :[N]T, now it accepts the target, so one can send the command for
      any neoterm by id, like, to send commands to the neoterm 3, one can do
      :3T ls.
    • DEPRECATE T[N], Topen[N], Tclose[N], Tclear[N], Tkill[N] - The neoterm
      id was moved to the beginning of the command, so instead of :T2, for
      example, one must use :2T.
  • 07/03/2018
    • Do not call :bdelete! if buffer does not exist term#destroy was calling
      neoterm#close which was causing a cyclic call to :bdelete! <neoterm.buffer_id>.
  • 08/03/2018
    • Add vim's terminal support! ???
  • 15/03/2018
    • Fix bug where :[N]T wasn't accepting quoted arguments, like:
      :T echo "ls".
    • Make handlers/callbacks work in vim. Destroy instance when destroying a
      terminal.
  • 18/03/2018
    • Deprecate g:neoterm_tnew_mod and g:neoterm_position in favor of
      g:neoterm_default_mod, which will be used for every new neoterm window.
    • Add the feature of the last active neoterm. When sending a command or
      navigating among neoterms the last one will be marked as the last active and
      it'll be used by default in the next commands.

主要指標

概覽
名稱與所有者kassio/neoterm
主編程語言Vim Script
編程語言Shell (語言數: 2)
平台
許可證Other
所有者活动
創建於2015-04-07 03:05:58
推送於2023-03-09 21:27:51
最后一次提交2023-03-09 21:27:49
發布數0
用户参与
星數1.3k
關注者數14
派生數116
提交數462
已啟用問題?
問題數233
打開的問題數30
拉請求數96
打開的拉請求數0
關閉的拉請求數18
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?