The official Vim repository

Overview

Vim Logo

Github Build status Travis Build Status Appveyor Build status Cirrus Build Status Coverage Status Coverity Scan Language Grade: C/C++ Debian CI Packages Fossies codespell report

For translations of this README see the end.

What is Vim?

Vim is a greatly improved version of the good old UNIX editor Vi. Many new features have been added: multi-level undo, syntax highlighting, command line history, on-line help, spell checking, filename completion, block operations, script language, etc. There is also a Graphical User Interface (GUI) available. Still, Vi compatibility is maintained, those who have Vi "in the fingers" will feel at home. See runtime/doc/vi_diff.txt for differences with Vi.

This editor is very useful for editing programs and other plain text files. All commands are given with normal keyboard characters, so those who can type with ten fingers can work very fast. Additionally, function keys can be mapped to commands by the user, and the mouse can be used.

Vim runs under MS-Windows (XP, Vista, 7, 8, 10), macOS, Haiku, VMS and almost all flavours of UNIX. Porting to other systems should not be very difficult. Older versions of Vim run on MS-DOS, MS-Windows 95/98/Me/NT/2000, Amiga DOS, Atari MiNT, BeOS, RISC OS and OS/2. These are no longer maintained.

For Vim9 script see README_VIM9.

Distribution

You can often use your favorite package manager to install Vim. On Mac and Linux a small version of Vim is pre-installed, you still need to install Vim if you want more features.

There are separate distributions for Unix, PC, Amiga and some other systems. This README.md file comes with the runtime archive. It includes the documentation, syntax files and other files that are used at runtime. To run Vim you must get either one of the binary archives or a source archive. Which one you need depends on the system you want to run it on and whether you want or must compile it yourself. Check http://www.vim.org/download.php for an overview of currently available distributions.

Some popular places to get the latest Vim:

Compiling

If you obtained a binary distribution you don't need to compile Vim. If you obtained a source distribution, all the stuff for compiling Vim is in the src directory. See src/INSTALL for instructions.

Installation

See one of these files for system-specific instructions. Either in the READMEdir directory (in the repository) or the top directory (if you unpack an archive):

README_ami.txt		Amiga
README_unix.txt		Unix
README_dos.txt		MS-DOS and MS-Windows
README_mac.txt		Macintosh
README_haiku.txt	Haiku
README_vms.txt		VMS

There are other README_*.txt files, depending on the distribution you used.

Documentation

The Vim tutor is a one hour training course for beginners. Often it can be started as vimtutor. See :help tutor for more information.

The best is to use :help in Vim. If you don't have an executable yet, read runtime/doc/help.txt. It contains pointers to the other documentation files. The User Manual reads like a book and is recommended to learn to use Vim. See :help user-manual.

Copying

Vim is Charityware. You can use and copy it as much as you like, but you are encouraged to make a donation to help orphans in Uganda. Please read the file runtime/doc/uganda.txt for details (do :help uganda inside Vim).

Summary of the license: There are no restrictions on using or distributing an unmodified copy of Vim. Parts of Vim may also be distributed, but the license text must always be included. For modified versions a few restrictions apply. The license is GPL compatible, you may compile Vim with GPL libraries and distribute it.

Sponsoring

Fixing bugs and adding new features takes a lot of time and effort. To show your appreciation for the work and motivate Bram and others to continue working on Vim please send a donation.

Since Bram is back to a paid job the money will now be used to help children in Uganda. See runtime/doc/uganda.txt. But at the same time donations increase Bram's motivation to keep working on Vim!

For the most recent information about sponsoring look on the Vim web site: http://www.vim.org/sponsor/

Contributing

If you would like to help making Vim better, see the CONTRIBUTING.md file.

Information

The latest news about Vim can be found on the Vim home page: http://www.vim.org/

If you have problems, have a look at the Vim documentation or tips: http://www.vim.org/docs.php http://vim.wikia.com/wiki/Vim_Tips_Wiki

If you still have problems or any other questions, use one of the mailing lists to discuss them with Vim users and developers: http://www.vim.org/maillist.php

If nothing else works, report bugs directly: Bram Moolenaar [email protected]

Main author

Send any other comments, patches, flowers and suggestions to: Bram Moolenaar [email protected]

This is README.md for version 8.2 of Vim: Vi IMproved.

Translations of this README

Korean

Issues
  • '$q q' shows at the first line

    '$q q' shows at the first line

    :version
    VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Aug 22 2017 18:15:34)
    MacOS X (unix) version
    Included patches: 1-983
    Compiled by Homebrew
    

    I'm using vim version 8.0.983. Everytime i start up vim, it shows $q q at the first line.

    This is what the command $ vim shows:

    $q q
    ~                                                                               
    ~                                                                                                                                                                                        
    ~                                                                               
    ~                              VIM - Vi IMproved                                
    ~                                                                               
    ~                               version 8.0.983                                 
    ~                           by Bram Moolenaar et al.                            
    ~                 Vim is open source and freely distributable                   
    ~                                                                               
    ~                        Help poor children in Uganda!                          
    ~                type  :help iccf<Enter>       for information                  
    ~                                                                               
    ~                type  :q<Enter>               to exit                          
    ~                type  :help<Enter>  or  <F1>  for on-line help                 
    ~                type  :help version8<Enter>   for version info                 
    

    And $ vim foo shows:

    $q q
    ~                                                                               
    ~                                                                               
    ~                                                                               
    ~                                                                                                                                               
    ~                                                                               
    "foo" [New File]
    
    opened by littleylv 160
  • [discuss] Popup Window API design.

    [discuss] Popup Window API design.

    This is not an issue, but I have no idea how to attach images in vim_dev group. So forgive me create this post in the issues and it can be closed immediately.

    The human readable page is here: https://github.com/skywind3000/vim-proposal/blob/master/popup_window.md


    Popup Window API Proposal

    Problem

    Vim has already got some builtin popup-widgets for certain usage, like completion menu or balloon. But users and plugin authors are still asking for more:

    In Vim conf 2018, Bram claimed that he has plan for this already:

    Popup Windows:

    Use for a notification:

    • Asynchronously show window with text “build done”.
    • Remove after a few seconds.

    Use for picking an item:

    • Show window where each line is an item
    • Let user pick an item
    • A bit like confirm() but much nicer

    Summary, there are two types of popup window: interactive and non-interactive.

    For non-interactive popup windows, people want to use them to:

    • Display the documentation for a function:

    emacs-2

    • Display linting errors or warnings:

    kakoune-1

    • Preview a portion of file (can be used to preview grep results in quickfix):

    emacs-1

    • Display funny help for newbies (like paperclip assistent in office 2000):

    kakoune-2

    For interactive popup windows, people want to use them to:

    • pick an item:

    ex-pick

    • display a nice popup menu:

    ex-menu

    • cmd line completion:

    ex-cmdline

    • use fuzzy finder in a popup window:

    ex-fuzzy

    There are too many popup-related widgets for certain usage, designing one by one is nearly impossible.

    Implementing a neovim's floating window will take too much time (it is working in progress for almost 2-years and still not merge to master).

    Can we implement the popup window in a simple and adaptive way ? Is this possible to unify all their needs and simplify API design ?

    The following parts of this article will introduce an overlay mechanism similar to Emacs's text overlay which is the backend of various popup windows in Emacs.

    API Scope

    Popup windows will draw into an overlay layer, A popup will remain after creation until an erase function is called. Everything in the overlay will not interfere vim's states, people can continue editing or using vim commands no matter there is a popup window or not.

    So, the APIs are only designed for drawing a popup window and has nothing to do with user input. Dialogs like yes/no box and confirm box require user input, can be simulated with following steps:

    function! Dialog_YesNo(...)
        while not_quit
           draw/update the popup window
           get input from getchar()
        endwhile
        erase the popup window
    endfunc
    

    Popup window APIs is not responsible for any interactive functionalities. Instead of implementing a complex widget/event system (which is too complex), it is sane to let user to handle the input by getchar().

    There can be a popup.vim script contains some predefined popup windows/dialogs and will be shipped with vim itself. User can use the primitive APIs and getchar() to implement other complex dialogs like a popup fuzzy finder or a command line history completion box.

    Overlay Buffer

    The overlay buffer is a character matrix with the same size of the screen:

    |\     |\
    | \    | \
    |  \   |  \
    |   \  |   \
    |   |  |   |
    | 1 |  | 2 |   <---- Observer
    |   |  |   |
    |   /  |   /
    |  /   |  /
    | /    | /
    |/     |/
    
    ^      ^
    |      |
    |   Overlay Buffer (M rows and N columns)
    |
    Ground Vim UI (M rows and N columns)
     
    

    Similar to Video Buffer (0xb8000) in x86's text mode, the overlay buffer is a 2D array of characters and attributes. Change the content of the 2D array will change the text in the screen.

    The overlay buffer is invisible by default and can be enabled by:

    set guioptions+=o
    

    Every existent text rendering code in both Vim & GVim needs to be updated to support this overlay buffer, once it finished, we can use it to build powerful popup windows.

    There are also some basic APIs for overlay buffer:

    • add a text string with position and attribute.
    • erase a rectangle of text.
    • command redrawoverlay to update the overlay (it uses double buffer to prevent flicker).

    With these primitive APIs, user can draw what ever they like on the overlay buffer.

    Overlay Panes

    Overlay panes is an abstraction of the popup windows, it consists of:

    • position and size
    • z order (for overlapping calculation)
    • background color
    • border styles
    • lines of text and text-properties

    There can be multiple panes at the same time, the panes can be manipulated by:

    pane_create(int row, int col, int width, int height, ...);
    pane_destroy(int pane_id);
    pane_update(int pane_id, ...);
    pane_move(int pane_id, int new_row, int new_col, int new_width, int new_height);
    pane_show(int pane_id, bool show_hide);
    

    (PS: they are provided as both C-apis and vim functions).

    The life cycle of a pane is between pane_create and pane_destroy.

    The (row, col) is using screen coordinate system, and there can be some functions to convert window based coordinate system to screen coordinate system. If you want to display a popup balloon right above your cursor, you can use them to calculate the position.

    Finally, there is a function to render the pane list into the overlay buffer:

    pane_flush();
    

    If you create some panes, the overlay buffer will not change until pane_flush().

    Popup Windows

    All the common popup windows are implemented in popup.vim script, they will use panes to display a popup window and getchar() to provide interactive functionalities.

    There are some predefined popup windows:

    • Popup_Message(): display a "build complete" message and hide after a few seconds.
    • Popup_LinterHint(): display a message right above cursor and hide if cursor moves outside current <cword>.
    • Popup_Menu(): display a menu (use getchar() to receive user input) and quit after user select an item.
    • Popup_YesNo(): display a yes/no box and return the result after user made a selection.
    • ...
    • and so on.

    User or plugin authors can use the high level APIs provided by popup.vim or design their own popup window by utilizing lower level pane APIs or overlay APIs.

    Summary

    It is complex to design an event system or NeoVim's floating window, and nearly impossible to implement every type of popup window for certain usage.

    To unify and simplify the interface, this proposal suggests to provide an overlay mechanism with some primitive APIs to:

    • render a popup window (pane)
    • erase a popup window
    • update a popup window

    And let user handle input themself by getchar(). At last, makes it possible to enable users to create various popup windows with different styles and functionalities.

    --

    2019/3/2 edit: floating window got merged to master.

    enhancement discuss 
    opened by skywind3000 138
  • win32: Refactor the NSIS installer

    win32: Refactor the NSIS installer

    After the discussion in #3485, I have created a new NSIS installer. The appearance is based on @gpwen's work and also uses MUI2, but the rest of the code is based on the original (non-MUI2) NSIS script and this still relies on dosinst.c. So we don't need to maintain duplicated codes. The items I listed at https://github.com/vim/vim/issues/3485#issuecomment-425577841 are all implemented.

    And also:

    • Most of the message boxes were removed like gpwen's.
    • The command prompt will not be shown. (nsExec::Exec is used instead of ExecWait.)
    • Uninstallation of the old version will be started after selecting the install location. (same as gpwen's)
    • The installer now remembers the selections of the user for generating _vimrc. (Key remap and mouse behavior.)
    • Unicode mode is turned on for future translation. This requires NSIS 3.0. (gpwen's translation uses each encoding for each language. This uses UTF-8 (with BOM) for all languages.)

    You can download an installer from here: https://ci.appveyor.com/project/k-takata/vim-win32-installer/build/175/job/jod0d3d3y9fvet3y/artifacts (No need to care about the CI status. It's just failed to push the result to GitHub releases.)

    Edited: You can also download it from here: https://github.com/k-takata/vim-win32-installer/releases/tag/v8.1.0443-newinstaller Newer version is also avaliable in my later comment.

    platform-windows installer 
    opened by k-takata 109
  • Support for plugin authors needs to be improved (poll)

    Support for plugin authors needs to be improved (poll)

    Vim has many features that plugin authors can use to achieve their goal. But what is still missing? What could be simplified? What is currently impossible?

    Please use one comment for each suggestion. Use the thumbs-up and thumbs-down to express whether you agree with a specific answer/request (you can find that in the header of the comment on the top right, looks like a smiley face).

    NOTE: Let's delete comments that are older than 24 hours that are not items to vote on. Otherwise the list gets too long and confusing. This issue is not for discussing alternatives, the author can update the suggestion when needed (but don't change the meaning, otherwise previous votes are miscounted).

    (I tried starting this on stackoverflow, but apparently opinions are not welcome there)

    opened by brammool 108
  • Add the matchfuzzy() function

    Add the matchfuzzy() function

    Add a function for fuzzy matching a string against a list of strings and return a list of matching strings.

    This is ported from the lib_fts library developed by Forrest Smith.

    A blog describing the algorithm is at

    https://www.forrestthewoods.com/blog/reverse_engineering_sublime_texts_fuzzy_match

    The code for this library is at:

    https://github.com/forrestthewoods/lib_fts/tree/master/code

    opened by yegappan 87
  • Vim cryptmethod is not authenticated

    Vim cryptmethod is not authenticated

    When using cryptmethod=blowfish2, the saved ciphertext is not authenticated with a message authentication code ("MAC tag"). Consider saving "Lorem ipsum dolor sit amet, consectetur adipiscing elit." to a text file, and getting the SHA-256 digest of the ciphertext:

    $ vim -x /tmp/lorem.txt
    (Use "vim" as the passphrase)
    $ sha256sum /tmp/lorem.txt
    510e57357353d511dac719bc238900456332ca0e4c00bcf12d244fdc66355f8e  /tmp/lorem.txt
    

    Now deliberately corrupt the file:

    $ dd seek=50 conv=notrunc bs=1 count=10 if=/dev/urandom of=/tmp/lorem.txt
    10+0 records in
    10+0 records out
    10 bytes copied, 0.000293754 s, 34.0 kB/s
    

    Notice the SHA-256 digest has changed. Open the file, and notice that the plaintext has changed:

    $ sha256sum /tmp/lorem.txt 
    f17d3494643ed8bef5f0ba7fd67af6682f0332a0bccf52e9a2640604bec0b111  /tmp/lorem.txt
    $ vim -x /tmp/lorem.txt
    (Use "vim" as the passphrase)
    

    I get "Lorem ipsum dolor sit £ÕH<8a>`7^T¸³­#÷f;Qüצadipiscing elit." returned. Your mileage may vary.

    If the ciphertext was authenticated with a cryptographically secure hashing function (Skein by Bruce Schneier would be fitting, given the use of his Blowfish algorithm as the symmetric cipher), and if the MAC tag was calculated on the ciphertext, then when attempting to decrypt, if the MAC tag did not match the newly calculated MAC tag, Vim should error out, rather than decrypting and displaying the file. See the Wikipedia article on "Encrypt-then-MAC".

    Vim should use "Encrypt-then-MAC" authenticated encryption when using cryptmethod.

    opened by atoponce 71
  • Add Digital Signature for windows version

    Add Digital Signature for windows version

    PuTTY have been add it since 0.67 sp20161002_111031

    To help protect against tampering in transit from our website or after downloading, I think it's necessery to add it.

    platform-windows installer 
    opened by wbsdty331 61
  • lost content of system clipboard after in/out vim

    lost content of system clipboard after in/out vim

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce Detailed steps to reproduce the behavior:

    1. copy text in the notepad or somewhere.
    2. mv .vim abc
    3. 'vim --clean' and 'i' and try to paste it.
    4. ':q!' the vim - try to paste it at bash/cli -> paste ok.
    5. 'vim' and 'i' and try to paste it.
    6. ':q!' the vim - try to paste it at bash/cli -> nothing to paste.

    Expected behavior expect the content pasted ok/there.

    Screenshots n/a.

    Environment (please complete the following information): Vi IMproved 8.1 (2018 May 18, compiled Sep 22 2019 21:50:45) Included patches: 1-2065

    • Ubuntu 18.04

    Additional context should be some runtime plugin caused this - i guessed.

    opened by Shane-XB-Qian 59
  • manpager.vim plugin fails for certain manpages

    manpager.vim plugin fails for certain manpages

    Note

    This issue was created to capture/continue discussion on PR #2296 that was unrelated to the content of the PR itself.


    I don't really know much about man, but my understanding is that the challenge of manpager.vim is to infer, from the text of a manpage, its precise location in the man db (/usr/share/man or whatever else it might be on other systems). I don't know whether there is a standard for how such a location should be encoded in the first line of the file, but it seems:

    • the general rule for most built-in and commonly-used GNU utilities is manpage headers in uppercase and filenames in lowercase, e.g., LS(1) for /usr/share/man/man1/ls.1

    • an unfortunate and not-uncommon edge case is filenames and manpage headers matching case (e.g., Xorg(1) for /usr/share/man/man1/Xorg.1)

    • another unfortunate edge case, according to @lcd047, is where, e.g., zzz and ZZZ have separate manpages, but may both use uppercased manpage headers (at least, it appears that way for zzz).

    • another (hopefully one-off) edge case I've encountered is with GNU stow (installed via Homebrew on my Mac):

      IO::FILE=IO(0X81D9F0)(1)					User Contributed Perl Documentation					  IO::FILE=IO(0X81D9F0)(1)
      

      (and it turns out this manpage isn't even in section 1 of the manpages — it's in section 8!)

    I don't know of any other edge cases (though I'm sure there are at least a few).

    Proposal

    What would the maintainers think of the following procedure?

    1. Check for both the case-sensitive and downcased versions of the manpage. If only one is found, use that. If both are found, then...
    2. Use the numeric section from the manpage header, and the name from the first word of the first line of the NAME section of the manpage (case-sensitive).
    3. If the manpage header can't be parsed according to the standard format, don't use any numeric section and simply call :Man with the first word of the first line of the NAME section of the manpage (case-sensitive).

    I believe this should adequately handle all edge cases without going out of its way to explicitly support the quirks of one platform or another.

    runtime 
    opened by rlue 55
  • Can't get transparent background with termguicolors enabled

    Can't get transparent background with termguicolors enabled

    I've enabled true colors for Vim with success using:

     set t_8f=\[[38;2;%lu;%lu;%lum
     set t_8b=\[[48;2;%lu;%lu;%lum
     set termguicolors
    

    (check :h xterm-true-color for more information)

    I have then enabled a true color colorscheme to try the new setting, like:

    set background=dark
    colors deep-space
    

    (https://github.com/tyrannicaltoucan/vim-deep-space)

    Previously when using 256 colors I was able to get a transparent background by:

    hi! Normal ctermbg=NONE guibg=NONE
    hi! NonText ctermbg=NONE guibg=NONE
    

    Now, this is not working anymore and I don't know any alternative. Is it supported to get transparent background with Vim under termguicolors?

    EDIT 1

    I have noticed that :hi! Normal ctermbg=NONE guibg=NONE is not having any effect at all. When I execute :hi! Normal ctermbg=0 guibg=#000000, my background is changed to black, then when I execute :hi! Normal ctermbg=NONE guibg=NONE, the background stays black, so :hi! Normal ctermbg=NONE guibg=NONE is in reality doing nothing and the background just sticks with the last opaque setting that got applied.

    EDIT 2

    The exact same configuration works on NeoVim 0.1.5.

    patch 
    opened by oblitum 54
  • how about auto adjust tab title position if there lots of tabs opened?

    how about auto adjust tab title position if there lots of tabs opened?

    Is your feature request about something that is currently impossible or hard to do? Please describe the problem. image // looks if there are lots tabs opened, then cur tab's title probably was not displayed.

    Describe the solution you'd like // how about auto adjust tab title position if there lots of tabs opened?

    Describe alternatives you've considered // though tabs cmd can help.

    Additional context n/a.

    enhancement 
    opened by Shane-XB-Qian 0
  • Fixed

    Fixed "Vimscript" notation in comments to "Vim script".

    Source: https://groups.google.com/g/vim_dev/c/3Z5yM8KER2w/m/wAqws0QSEAAJ

    "Vim script" is the short form.

    opened by h-east 1
  • Fix expression register was broken when put was not evaluate

    Fix expression register was broken when put was not evaluate

    Describe the bug Expression register was broken when :put command was not evaluated.

    To Reproduce Detailed steps to reproduce the behavior:

    1. Run vim --clean (or gvim --clean, etc.)
    2. Execute following Vim script
    call setreg('=', '1+1')
    if 0
      put =1
    endif
    echo string(getreg('=', 1))
    
    1. Displays ''

    Expected behavior Displays '1+1'

    opened by kuuote 0
  • Stuttering cursorline in newer versions of vim

    Stuttering cursorline in newer versions of vim

    Instructions: Replace the template text and remove irrelevant text (including this line)

    Description I'm currently using the latest version of vim like always. I never use outdated packages. I've been experiencing cursorline stutter in vim. I don't experience it when using this plugin https://github.com/miyakogi/conoline.vim That plugin does the job for me now. My config file . I've also experienced this with neovim and gvim.

    Reproduce Detailed steps to reproduce the behavior:

    1. Run `vim with rnu cursorline cursorcolumn and maybe a theme so that the cursorline is more graphical and does not have any underline'
    2. Edit more cluttered and heavy files
    3. Keep scrolling until you see visual artifacts. Setting scrolloff as well would be better.

    Expected behavior Expected behavior would be simple smooth scroll. To visually feel it try the plugin mentioned above. That plugin has no lag.

    Screenshots none

    Environment (please complete the following information):

    • Vim version -> 8.2.3
    • OS: Archlinux
    • Terminal: urxvt and alacritty.

    Additional context You should really try installing the plugin mentioned in the description. It has a very smooth experience which is what I'd expect to have by default.

    opened by zim0369 2
  • doc: fix spelling

    doc: fix spelling

    null

    documentation 
    opened by sam-sjs 0
  • Set specific font for bold and italic text?

    Set specific font for bold and italic text?

    I am using vim in (kitty) terminal where I can set different font for normal, italic, bold and italic-bold text. This is important because (for instance) Cascadia Code has many weights as separate fonts:

    Cascadia Code PL
        Cascadia Code PL Bold
        Cascadia Code PL Bold Italic
        Cascadia Code PL ExtraLight
        Cascadia Code PL ExtraLight Italic
        Cascadia Code PL Italic
        Cascadia Code PL Light
        Cascadia Code PL Light Italic
        Cascadia Code PL Regular
        Cascadia Code PL SemiBold
        Cascadia Code PL SemiBold Italic
        Cascadia Code PL SemiLight
        Cascadia Code PL SemiLight Italic
    
    

    Since I prefer thinner font, setting 'Light' as normal font and 'Regular' as bold works well in terminal.

    However, in gvim, setting:

    	set guifont=Cascadia\ Code\ PL\ Light\ 10.2
    	set guifontwide=Cascadia\ Code\ PL\ Light\ 10.2
    
    

    produces 'Light' normal font, then for bold segments it falls to 'Bold' since I can't specify bold separately.

    Question: Is it possible to specify bold/italic/bold-italic separately in gvim? If not possible please consider this as feature request.

    Thanks!

    enhancement 
    opened by dusanx 3
  • Duplicate buffer for same file when opening non-existent file with subfolder

    Duplicate buffer for same file when opening non-existent file with subfolder

    Describe the bug In general, Vim makes sure each opened file only has one buffer backing it. This is obviously useful because it prevents the user from opening multiple buffers of the same file and make edits separately which could be confusing especially when you save and load.

    However, this can be broken if you use Vim to open a new file with a subfolder, and then use cd to navigate to other folders. The end result is you can get Vim to have multiple buffers pointing to the same file.

    To Reproduce Detailed steps to reproduce the behavior:

    1. Go to a folder in terminal.

    2. Enter the following commands:

      mkdir a
      cat > a/b.txt << EOF
      This is a/b.txt
      EOF
      

      This should make a new folder a, which contains a file b.txt with some stub text in it.

    3. Type cd a; vim a/b.txt.

      You should notice "a/b.txt" [New DIRECTORY] at the bottom. Also, :ls should show 1 buffer.

    4. In Vim, type :cd .., then :e.

      Now, something weird happens. Vim actually opens a/b.txt, but in another buffer (buffer number 2). If you do :ls, you will see 2 buffers, but both buffers point to the same file.

    5. To demonstrate the error, do :sbuffer 1. Now you will see a split, with two files both pointing to a/b.txt, but they are different buffers. If you modify one buffer, the other won't show the change. If you save the change to one buffer, you can do :e to show the update in another. This breaks Vim's expectations of "one buffer per file".

    Expected behavior Vim should not make more than one buffer per file.

    To be exact, when you open a new file a/b.txt, and then :cd .., the file should have become a/a/b.txt. Vim gets confused about the relative path of the file which is what leads to this issue.

    Screenshots image

    Environment (please complete the following information):

    • Vim version [e.g. 8.2.3455]
    • OS: [e.g. macOS 11.5.1]
    • Terminal: Apple Terminal
    opened by ychin 0
  • Update some Spanish msgid strings

    Update some Spanish msgid strings

    Some of the msgid strings in es.po where outdated and I have now bring them up to date. Note that there might be other outdated msgid. The ones I have modified where found while using vi and realizing there are untranslated messages. Probably there are other msgid strings that are yet to be synchronized. I have tried the compiles es.mo and it now shows the proper message in Spanish.

    translation 
    opened by cquike 6
  • Nim syntax

    Nim syntax

    It seems Nim [1] syntax is not currently available. I have been using this [2] and it works well. I filed an issue with the maintainer some months ago, but they never responded.

    Can we add it anyway? I can maintain the Nim code if need be.

    1. https://nim-lang.org
    2. https://github.com/zah/nim.vim
    runtime 
    opened by 89z 1
  • Incorrect highlighting for TypeScript

    Incorrect highlighting for TypeScript

    Incorrect highlighting for TypeScript

    To Reproduce

    1. Run vim --clean temp.ts
    2. Type:
    const pipe =
      <A, B, C>(f: (a: A) => B, g: (b: B) => C) =>
      (x: A): C =>
        g(f(x));
    
    pipe(
      (): unknown => ({ err: new Error(`date: ${new Date()}`) }),
      () => '',
    )('');
    console.log("It's not highlighted properly before ` appears");
    console.log('And this line is good!');
    
    1. You can see error here:
    image

    Expected behavior Syntax highlighting should work properly. :)

    Environment (please complete the following information):

    • vim --version
    VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Sep 04 2021 11:44:01)
    macOS version - x86_64
    Included patches: 1-3400
    Compiled by Homebrew
    Huge version without GUI.  Features included (+) or not (-):
    +acl               +file_in_path      +mouse_urxvt       -tag_any_white
    +arabic            +find_in_path      +mouse_xterm       -tcl
    +autocmd           +float             +multi_byte        +termguicolors
    +autochdir         +folding           +multi_lang        +terminal
    -autoservername    -footer            -mzscheme          +terminfo
    -balloon_eval      +fork()            +netbeans_intg     +termresponse
    +balloon_eval_term +gettext           +num64             +textobjects
    -browse            -hangul_input      +packages          +textprop
    ++builtin_terms    +iconv             +path_extra        +timers
    +byte_offset       +insert_expand     +perl              +title
    +channel           +ipv6              +persistent_undo   -toolbar
    +cindent           +job               +popupwin          +user_commands
    -clientserver      +jumplist          +postscript        +vartabs
    +clipboard         +keymap            +printer           +vertsplit
    +cmdline_compl     +lambda            +profile           +virtualedit
    +cmdline_hist      +langmap           -python            +visual
    +cmdline_info      +libcall           +python3           +visualextra
    +comments          +linebreak         +quickfix          +viminfo
    +conceal           +lispindent        +reltime           +vreplace
    +cryptv            +listcmds          +rightleft         +wildignore
    +cscope            +localmap          +ruby              +wildmenu
    +cursorbind        +lua               +scrollbind        +windows
    +cursorshape       +menu              +signs             +writebackup
    +dialog_con        +mksession         +smartindent       -X11
    +diff              +modify_fname      -sodium            -xfontset
    +digraphs          +mouse             -sound             -xim
    -dnd               -mouseshape        +spell             -xpm
    -ebcdic            +mouse_dec         +startuptime       -xsmp
    +emacs_tags        -mouse_gpm         +statusline        -xterm_clipboard
    +eval              -mouse_jsbterm     -sun_workshop      -xterm_save
    +ex_extra          +mouse_netterm     +syntax
    +extra_search      +mouse_sgr         +tag_binary
    -farsi             -mouse_sysmouse    -tag_old_static
       system vimrc file: "$VIM/vimrc"
         user vimrc file: "$HOME/.vimrc"
     2nd user vimrc file: "~/.vim/vimrc"
          user exrc file: "$HOME/.exrc"
           defaults file: "$VIMRUNTIME/defaults.vim"
      fall-back for $VIM: "/usr/local/share/vim"
    Compilation: clang -c -I. -Iproto -DHAVE_CONFIG_H -DMACOS_X -DMACOS_X_DARWIN -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
    Linking: clang -L. -fstack-protector-strong -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/[email protected]/lib -L/usr/local/opt/readline/lib -L/usr/local/lib -o vim -lm -lncurses -liconv -lintl -framework AppKit -L/usr/local/opt/lua/lib -llua5.4 -mmacosx-version-min=11.3 -fstack-protector-strong -L/usr/local/lib -L/usr/local/Cellar/perl/5.34.0/lib/perl5/5.34.0/darwin-thread-multi-2level/CORE -lperl -L/usr/local/opt/[email protected]/Frameworks/Python.framework/Versions/3.9/lib/python3.9/config-3.9-darwin -lpython3.9 -framework CoreFoundation -lruby.3.0 -L/usr/local/Cellar/ruby/3.0.2/lib
    
    • OS: macOS 11.6
    • Terminal: iTerm2
    runtime 
    opened by DKurilo 4
Owner
Vim - the text editor
The github base for core Vim
Vim - the text editor
Visual Studio Code

Visual Studio Code - Open Source ("Code - OSS") The Repository This repository ("Code - OSS") is where we (Microsoft) develop the Visual Studio Code p

Microsoft 121.6k Sep 20, 2021
LiveCode cross-platform development environment (engine)

LiveCode Community Edition Copyright © 2003-2019 LiveCode Ltd., Edinburgh, UK Introduction The LiveCode Community open source platform provides a way

null 409 Sep 18, 2021
Lightweight Lua-based IDE for Lua with code completion, syntax highlighting, live coding, remote debugger, and code analyzer; supports Lua 5.1, 5.2, 5.3, 5.4, LuaJIT and other Lua interpreters on Windows, macOS, and Linux

Project Description ZeroBrane Studio is a lightweight cross-platform Lua IDE with code completion, syntax highlighting, remote debugger, code analyzer

Paul Kulchenko 2.2k Sep 20, 2021
:atom: The hackable text editor

Atom Atom is a hackable text editor for the 21st century, built on Electron, and based on everything we love about our favorite editors. We designed i

Atom 56k Sep 18, 2021
Apache NetBeans

Apache NetBeans Apache NetBeans is an open source development environment, tooling platform, and application framework. Build status GitHub actions Tr

The Apache Software Foundation 1.7k Sep 16, 2021
MonoDevelop is a cross platform .NET IDE

MonoDevelop is a full-featured integrated development environment (IDE) for mono using Gtk#. The MonoDevelop core is also the foundation for Visual St

Mono Project 2.7k Sep 23, 2021