Neovim Lua-Konfiguration von 0 auf 1

1. C/C++-Umgebungskonfiguration unter Windows 10

1.1 Einführung in MSYS2

  • Cygwin
    MSYS2Ursprünglich entdeckte einer der ursprünglichen Ingenieure , dass das System eine Zieldatei (dh eine ausführbare Datei) verwendet und die Toolkette bereits Zieldateien unterstützt und Sprachbibliotheken bereitstellt Cyguns. Theoretisch ist die Umleitung ( Entsprechend der Neukompilierung der entsprechenden Zielplattform) kann dieser Compiler als (Cross-Compiler) ausführbare Dateien unter der Plattform generieren . Basierend auf dieser Idee wurde das ursprüngliche Compiler-Tool für die Plattform entwickelt , um das eigene Compiler-Tool zur Generierung von Plattformanwendungen zu ersetzen. Um die Nutzung zu nutzen , realisieren Sie die Integration von Befehlsinterpretern (z. B. . Da es eine eingebettete Toolkette auf dem System bereitstellen kann (die vorherige Lösung besteht darin, sie zu verwenden ) und auch implementieren kann (Cross-Compilation von Drittanbietern), kann es auf einer Remote-Workstation zum Kompilieren von Code für andere Plattformen verwendet werden Dadurch wird eine große Anzahl von Ingenieuren angezogen, sich an der Entwicklung zu beteiligen. Später, mit der Entwicklung und dem Wachstum des Systems, kann das aktuelle System nicht nur Kompatibilität bieten, sondern auch mehr Abhängigkeiten von der Simulationsschicht realisieren, was viele Menschen auf eine Transplantation der Anwendung hoffen lässtCygwinCygunsSteve ChamberlainWindowsCOFFGNUx86COFFCnewlibGCCcross compilerGCCWindowsSteve ChamberlainCygwinWindowsGCCMSVCWindowsGCCSteve ChamberlaindllPosixWindowsAPIBourne shellbashCygwinWindowsDJGPPthree-way cross-compileCygwinLinuxCygwinPOSIXLinuxWindowsDie Aufgabe der Plattform wird übergeben Cygwin.
  • MinGW
    Da Cygwindie Kompilierung und der Aufruf der Anwendung von POSIXder Windows APImittleren Schicht abhängen, führt dies auch zu Cygwineiner immer größeren Größe, und GNUauch die Nachfrage der Entwickler nach Toolketten, die keine mittlere Schicht erfordern, wird immer stärker. Um diesen Zweck zu erreichen, Colin Peterswurde 1998 ein Open-Source-Projekt erstellt und benannt (Minimalist GNU für W32). Später wurde mingw3232“ entfernt und der Projektname wurde zu MinGW. Es stellte eine Reihe von Header-Dateien und Importbibliotheken zur Minimierung von Toolchain- Abhängigkeiten bereit Verwendung. Als sich radikalere Entwickler anschlossen und mit der Entwicklung von , und begannen , befreiten sie sich auch vollständig von ihrer Abhängigkeit und ihr Hauptbeitrag bestand darin , dem Paket spezifischere Funktionen hinzuzufügen . Das Projekt wurde auf das Jahr 2000 verschoben , um mehr Hilfe von der Community zu erhalten und sich auf die Entwicklung zu konzentrieren. Aufgrund von Differenzen zwischen dem Projektteam und dem Projekt wurde das Projekt später auf das Jahr 2018 verschoben .MSVCRT.DLLMicrosoft Visual C RuntimeGNUCygwinJan-Jaap van der HeijdenbinutilsGCCmakeMinGWCygwinMumit KhanWindowsSourceForgeSourceForgeOSDN
  • MSYS
    MSYS( Minimal SYStem) wurde entwickelt, um die Mängel der MinGWfehlenden Skriptausführungsumgebung auszugleichen. Die mittlere Schicht bietet nur grundlegende Funktionen . Wenn sie zum Erstellen von Anwendungen verwendet wird und keine spezielle Arbeit erforderlich ist, wird die Hauptarbeit durch integrierte Direktaufrufe erledigt . Daher existiert es während des gesamten Arbeitsprozesses nur als Hilfswerkzeugkasten.shellmsys.dll POSIX APIMSYSPOSIX APIMinGWWindows APIMSYS
  • MinGW-w64
    Aus ungeklärten Gründen MinGWist das Update zu langsam und die Unterstützung für 64-Bit-Programme ist in weiter Ferne. In Verbindung mit dem APIAufkommen neuer Programme besteht MinGWin Zukunft ein dringender Bedarf an Unterstützung für 64-Bit-Programme. Um dieser neuen Herausforderung zu begegnen, OneVision Softwarewurde ein Zweig erstellt MinGWund benannt , der die Generierung von Bitprogrammen MinGW-w64unterstützt . Windows 64Als der Code jedoch anschließend MinGWdem Projektteam vorgelegt wurde, OneVisionlehnte das Projektteam ihn mit der Begründung ab, dass er nicht öffentliche oder proprietäre Informationen verwendete. Später wurde der Code einem der Hauptentwickler unter der Bedingung gespendet, dass er offen OneVisionblieb source , und anschließend und andere Der Hauptentwickler hat beschlossen, die Zusammenarbeit mit zu beenden und keine offiziellen Binär-Builds mehr bereitzustellen.MinGW-w64Kai TietzKai TietzMinGW
  • MSYS2
    MinGW-w64Da MSYSdie Aktualisierung zu langsam und zu alt war, wurde MSYS2( ) ebenfalls unabhängig auf der Grundlage Minimal SYStem 2modernerer CygwinPaare neu geschrieben. Anstatt zu versuchen , eine mit Android kompatible Umgebung bereitzustellen und eine Umgebung zum Erstellen nativer Software bereitzustellen , die jedoch eng mit den verwendeten Build-Tools verknüpft ist , wird auch eine mit Android kompatible Umgebung bereitgestellt , da sie tatsächlich darauf basiert . Darüber hinaus ermöglicht die Bereitstellung der minimalen Shell, die für den internetbasierten Betrieb und andere Build-Systeme erforderlich ist, dass transplantierte Programme lokal im Internet ausgeführt werden können , ohne dass die Arbeit unnötig dupliziert wird , was auch die Menge der bereitgestellten Simulationssoftware extrem gering macht.MinGW-w64MSYSCygwinWindowsPOSXIMSYS2WindowsGUNUnixCygwinPOSIXMSYS2AutoToolsUnixWindowsMSYS2CygwinPOSIX

1.2 MSYS2-Installation

  • MSYS2Die Download-Adresse lautet https://www.msys2.org
    Fügen Sie hier eine Bildbeschreibung ein
  • InstallierenMSYS2
    Fügen Sie hier eine Bildbeschreibung ein
  • Dieser Artikel wird MSYS2auf der Festplatte installiert D. Standardmäßig wird er auf Cder Festplatte installiert.
    Fügen Sie hier eine Bildbeschreibung ein
  • Nach Abschluss der Installation wird die Umgebung MSYS2automatisch geöffnetMSYS2 UCR64
    Fügen Sie hier eine Bildbeschreibung ein
  • MSYS2Es werden mehrere Umgebungen installiert. Die am häufigsten verwendeten sind die folgenden:
    Fügen Sie hier eine Bildbeschreibung ein

1.3 Integrieren Sie die Hauptumgebung von MSYS2 in Windows Terminal

  • Dieser Schritt ist nicht notwendig, aber der damit verbundene Schritt Terminalist nicht schön und umständlich zu bewältigen.
  • Geänderte Windows TerminalKonfigurationsdatei
    Fügen Sie hier eine Bildbeschreibung ein
  • Fügen Sie MSYS2 UCRT64 MSYS2 MSYS MSYS2 MINGW64 MSYS2 MINGW32 MSYS2 CLANG64 MSYS2 CLANG32die entsprechende Konfiguration zur Windows TerminalKonfigurationsdatei hinzu
            {
                "commandline": "D:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64 -shell zsh",
                "font": 
                {
                    "face": "JetBrainsMonoMedium Nerd Font Mono",
                    "size": 11.0
                },
                "guid": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
                "icon": "D:/msys64/ucrt64.ico",
                "name": "UCRT64 / MSYS2",
                "startingDirectory": "D:/msys64/home/%USERNAME%"
            },
            {
                "commandline": "D:/msys64/msys2_shell.cmd -defterm -here -no-start -msys -shell zsh",
                "font": 
                {
                    "face": "JetBrainsMonoMedium Nerd Font Mono",
                    "size": 11.0
                },
                "guid": "{71160544-14d8-4194-af25-d05feeac7233}",
                "icon": "D:/msys64/msys2.ico",
                "name": "MSYS / MSYS2",
                "startingDirectory": "D:/msys64/home/%USERNAME%"
            },
            {
                "commandline": "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -mingw64 -shell zsh",
                "font": 
                {
                    "face": "JetBrainsMonoMedium Nerd Font Mono",
                    "size": 11.0
                },
                "guid": "{4e0ab8a5-5f6b-49db-aab8-96814453d0e7}",
                "icon": "D:/msys64/mingw64.ico",
                "name": "MINGW64 / MSYS2",
                "startingDirectory": "D:/msys64/home/%USERNAME%"
            },
            {
                "commandline": "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -mingw32 -shell zsh",
                "font": 
                {
                    "face": "JetBrainsMonoMedium Nerd Font Mono",
                    "size": 11.0
                },
                "guid": "{32bbe7b5-eae3-4092-b208-14cc3848f8cb}",
                "icon": "D:/msys64/mingw32.ico",
                "name": "MINGW32 / MSYS2",
                "startingDirectory": "D:/msys64/home/%USERNAME%"
            },
            {
                "commandline": "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -clangarm64 -shell zsh",
                "font": 
                {
                    "face": "JetBrainsMonoMedium Nerd Font Mono",
                    "size": 11.0
                },
                "guid": "{e0c72876-abfe-494f-8fec-bba6a95087eb}",
                "icon": "D:/msys64/clangarm64.ico",
                "name": "CLANGARM64 / MSYS2",
                "startingDirectory": "D:/msys64/home/%USERNAME%"
            },
            {
                "commandline": "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -clang64 -shell zsh",
                "font": 
                {
                    "face": "JetBrainsMonoMedium Nerd Font Mono",
                    "size": 11.0
                },
                "guid": "{53c79562-9bac-46e3-b847-0abeae40908d}",
                "icon": "D:/msys64/clang64.ico",
                "name": "CLANG64 / MSYS2",
                "startingDirectory": "D:/msys64/home/%USERNAME%"
            },
            {
                "commandline": "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -clang64 -shell zsh",
                "font": 
                {
                    "face": "JetBrainsMonoMedium Nerd Font Mono",
                    "size": 11.0
                },
                "guid": "{d1d362aa-ea7c-4cc9-90ac-14ae810089e2}",
                "hidden": false,
                "icon": "D:\\msys64\\clang32.ico",
                "name": "CLANG32 / MSYS2",
                "startingDirectory": "D:/msys64/home/%USERNAME%"
            }

Fügen Sie hier eine Bildbeschreibung ein

  • Wirkung
    Fügen Sie hier eine Bildbeschreibung ein
  • Über msys2_shell.cmdParametereinstellungen

Durch msys2_shell.cmdFestlegen von Parametern können Sie MSYS2den Start verschiedener Umgebungstypen shellund die zugehörigen Standardeinstellungen steuern.

-defterm: MSYS2Nach dem Start das Standardterminal des Systems verwenden
-here: MSYS2Geben Sie nach dem Öffnen der Umgebung die Umgebung ein, in der der aktuelle Befehl ausgeführt wird. Wenn dieser Parameter nicht angegeben ist, wird standardmäßig das Verzeichnis eingegeben HOME:
-whereSie können MSYS2den Ordner angeben, der nach dem Öffnen eingegeben werden soll
-use-full-path(-full-path): Fügen Sie das Ganze Windowszur PATHUmgebung MSYS2hinzu
-no-start: Direkt im aktuellen Das Terminal betritt MSYS2die Umgebung und startet nicht mehr MSYS2das integrierte Terminalprogramm :
-shellGeben Sie den MSYS2Standardinterpretertyp der Umgebung anshell

  • Über HOMEVerzeichniseinstellungen

MSYS2 homeManchmal ist es notwendig , den Speicherort des Verzeichnisses anzugeben , aber msys2_shell.cmdes gibt keine solche Option .
Um HOMEdas Verzeichnis festzulegen, gibt es derzeit zwei Optionen: Eine besteht darin, die Datei zu ändern msys2_shell.cmd, und die andere besteht darin, die Parameter msys2_shell.cmdvon und die Parameter von zu verwenden-hereWindows TerminalstartingDirectory

  • Methode eins
D:\\msys64\\msys2_shell.cmd -no-start -use-full-path -here -ucrt64 set "HOME=%USERPROFILE%"
  • Methode Zwei
"commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64 -shell zsh"
"startingDirectory": "D:/msys64/home/%USERNAME%"
  • integriertOh My Zsh

Dieser Artikel Oh My Zshinstalliert es nur und optimiert es nicht.

pacman -Su zsh git
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

1.4 MSYS2-Betriebsumgebung und Pacman-Paketverwaltung

  • MSYS2Betriebsumgebung

MSYS2Es besteht tatsächlich aus 7 unabhängigen Unterumgebungen. Jede Unterumgebung verfügt über einen separaten Ordner und einen dedizierten Befehlszeilenschnittstelleneingang. Der Unterschied zwischen verschiedenen Umgebungen besteht hauptsächlich in der Basisbibliothek, auf der sie basieren. Im Allgemeinen UCRT64reicht die direkte Verwendung aus. Es wird empfohlen, UCRT64das Fenster zu öffnen und ucrt64die vorangestellte Software für die Installation auszuwählen.
MSYS2Die Unterschiede in verschiedenen Umgebungen spiegeln sich hauptsächlich in den folgenden Aspekten wider:

  • Pfadpräfix: Da msys2es sich um eine Mischung aus mehreren Umgebungen handelt, können mehrere gccsolcher Programme gleichzeitig vorhanden sein. Verwenden Sie daher das Pfadpräfix, um sie zu unterscheiden.
  • Toolchain: Es handelt sich um eine Reihe von Standardkompilierungsketten, wie archoben base-develund ubuntuobenbuild-essential
  • Architektur: 64 und 32 Bit
  • CBibliothek: CDie Standardbibliothek der Sprache, bestimmt durch die Umgebung
  • C++Bibliothek: C++Standardbibliothek, bestimmt vom Compiler

Die spezifischen Unterschiede zwischen verschiedenen Umgebungen sind wie folgt:

  • msys2: Dies ist msys2die Basisumgebung, einschließlich verschiedener linuxBefehlszeilentools (z. pacmanB. usw.), und andere Unterumgebungen erben davon. Die in dieser Unterumgebung kompilierten Programme sind jedoch auf MSYS2die dynamische Bibliothek angewiesen, und die kompilierten Tools dienen msysder Bereitstellung selbst oder den Entwicklern selbst. Beispielsweise vimwird der Editor häufig selbst kompiliert und verwendet. msysEs reicht aus, nur die bereitzustellen Version. Es wird nicht empfohlen, es für irgendetwas zu verwenden. pacmanAlles andere als die Paketverwaltung
  • mingw64 & mingw32: Im Zeitalter der vollständigen 32-Bit-Version ist es einfacher, es mingw32basierend auf msvcrt( ) zu verwenden Microsoft Visual C++ Runtimeals (was eine Reihe unterstützender Bibliotheken erfordert) und kann direkt darunter ausgeführt werden. Später wurde 64-Bit zum Mainstream. Basierend auf mingw32 war die Paketaktualisierung zu langsam und der Updater von und war auch sehr schwierig zu verwenden, sodass er zur Verwaltung jedes Pakets herausgebracht wurde .cygwinWindowsmingw64w32w64msys2pacman
  • ucrt64: Visual StudioDer neue Favorit, der vollständige Name lautet Universal C Runtime, wird verwendet, um den vorherigen zu mingw64&w32ersetzen msvcrt. ucrtGeladene Produkte werden nicht unterstützt msvcrt, daher Windows(<10)sind ältere Versionen nicht direkt mit msvcrtdarauf basierender Software kompatibel. Das ist nicht unangemessen radikal. Sie müssen wissen, dass msvcrtdie aktuelle Entwicklungsumgebung (nativ) C99und nicht unterstütztUTF8
  • clang64 & clang64: Verwenden Sie LLVMdie Toolkette anstelle GCCder Toolkette. Alle unterstützenden Umgebungen basieren darauf LLVM. Tatsächlich mingw64/w32ist es auch darin enthalten toolchain, aber es ist nicht die Standardeinstellung. Hier wird es als Standard herausgenommen und basiert ucrtdarauf.
  • clangarm64: Wird zur AndroidProgrammkompilierung verwendet
Name Präfix Werkzeugkette Die Architektur C-Bibliothek C++-Bibliothek
MSYS /usr gcc x86_64 Huhn libstdc++
UCRT64 /ucrt64 gcc x86_64 ucrt libstdc++
CLANG64 /clang64 llvm x86_64 ucrt libc++
CLANGARM64 /clangarm64 llvm aarch64 ucrt libc++
CLANG32 /clang32 llvm i686 ucrt libc++
MINGW64 /mingw64 gcc x86_64 msvcrt libstdc++
MINGW32 /mingw32 gcc i686 msvcrt libstdc++

MSYS2ArchLinuxDas Paketverwaltungstool wird pacmanzum Verwalten von Softwarepaketen verwendet . pacmanDie Quellen verwalteter Softwarepakete MSYS2variieren je nach Umgebung. MSYS2Es werden sieben Umgebungen bereitgestellt. Dementsprechend gibt es Softwarepakete und sieben verschiedene Quellen
zum Verwalten verschiedener Softwarequellen. Der Speicherort der Konfigurationsdatei Ist:/etc/pacman.d/

Fügen Sie hier eine Bildbeschreibung ein

  • pacmanDie Beziehung zwischen Softwarepaketen und MSYS2Umgebungen

Da pacmanSoftwarequellen aus mehreren verschiedenen Umgebungen gleichzeitig verwaltet werden, müssen Sie bei der Installation und Deinstallation von Software den vollständigen Namen des Softwarepakets angeben, um die Software in der entsprechenden Umgebung zu installieren oder die Software aus der entsprechenden Umgebung zu löschen; wenn der Name des Softwarepakets angegeben ist unvollständig ist, wird die Software standardmäßig in der Umgebung installiert . MSYSAngenommen , der Softwarename in der Hauptumgebung lautet : : : :
gcc
MSYSgcc
mingw64mingw-w64-x86_64-gcc
mingw32mingw-w64-i686-gcc
ucrt64mingw-w64-ucrt-x86_64-gcc

Fügen Sie hier eine Bildbeschreibung ein

  • pacmanAllgemeine Befehle

pacman -Sy: Laden Sie die neue Softwarepaketdatenbank vom Server herunter (laden Sie tatsächlich die neueste Softwareliste vom Remote-Warehouse auf das lokale herunter)
pacman -Syu. : Aktualisieren Sie das System und die gesamte installierte Software.
pacman -S <package>: Software installieren. Sie können auch mehrere Pakete gleichzeitig installieren. Trennen Sie dazu einfach die Paketnamen durch Leerzeichen.
pacman -Rs <package>: Löschen Sie die Software und löschen Sie auch die Software auf diesem Computer, von der nur die Software abhängt.
pacman -Ru <package>: Entfernen Sie Software und entfernen Sie auch Abhängigkeiten, die von keiner Software mehr benötigt werden.
pacman -Ssq <key words>: Suchen Sie im Warehouse nach Softwarepaketen, die Schlüsselwörter enthalten, und zeigen Sie diese übersichtlich an.
pacman -Qs <key words>: Nach installierten Paketen suchen.
pacman -Qi <package>: Informationen zu einem Softwarepaket anzeigen und detaillierte Informationen wie Softwareeinführung, Architektur, Abhängigkeiten, Größe usw. anzeigen.
pacman -Sg: Alle Paketgruppen im Software-Repository auflisten.
pacman -SgSoftwarepaketgruppe: Alle in einer Softwarepaketgruppe enthaltenen Softwarepakete anzeigen.
pacman -Sc: Bereinigen Sie deinstallierte Paketdateien, die sich im /var/cache/pacman/pkg/Verzeichnis befinden.
pacman -Scc: Alle Cache-Dateien löschen

1.5 Der klassische Weg, eine C/C++-Umgebung aufzubauen

Die sogenannte klassische Methode bezieht sich hauptsächlich auf zwei Punkte

  • Die von der auf diese Weise installierten C/C++Umgebung verwendeten Bibliotheken sind Windowsklassische msvcrtBibliotheken.
  • Diese Installationsmethode ist komplizierter und mechanischer.
  • OffenMSYS2 UTRC64
    Fügen Sie hier eine Bildbeschreibung ein
  • Paketdatenbank und Basispakete aktualisieren
pacman -Syu

Fügen Sie hier eine Bildbeschreibung ein

  • Es wird in der Mitte unterbrochen. Bitte öffnen Sie es erneut MSYS2 UCRT64und fahren Sie mit dem vorherigen Update fort.
pacman -Su
pacman -Sy
  • Installieren GCCundG++

Installation auf 32-Bit-Systemen. Installation mingw-w64-i686-gcc
auf 64-Bit-Systemenmingw-w64-x86_64-gcc

pacman -S mingw-w64-i686-gcc
pacman -S mingw-w64-x86_64-gcc
  • InstallierenDebugger

Installation auf 32-Bit-Systemen. Installation mingw-w64-i686-gdb
auf 64-Bit-Systemenmingw-w64-x86_64-gdb

pacman -S mingw-w64-i686-gdb
pacman -S mingw-w64-x86_64-gdb
  • Fügen Sie den Compiler zu den Systemumgebungsvariablen hinzu

Achten Sie darauf, zwischen 64- und 32-Bit-Dateipfaden zu unterscheiden

Fügen Sie hier eine Bildbeschreibung ein

Suchen Sie den entsprechenden binOrdner

Fügen Sie hier eine Bildbeschreibung ein

Ordnerpfad kopieren

  • 32-Bit:D:\msys64\mingw32\bin
  • 64-Bit:D:\msys64\mingw64\bin

Fügen Sie hier eine Bildbeschreibung ein

Umgebungsvariablen hinzufügen

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

  • Testen Sie GCC, ob die Installation erfolgreich ist
gcc --version

Fügen Sie hier eine Bildbeschreibung ein

1.6 Verwenden Sie ToolChain, um eine C/C++-Umgebung zu erstellen

In diesem Artikel wird diese Methode hauptsächlich beim Umgebungsaufbau UCRT64der Umgebung usw. in anderen Umgebungen verwendet . Mit diesem Befehl werden , und andere Kompilierungstools gepackt und installiert und im Verzeichnis installiert. Dies ist die Installation eines virtuellen Pakets Methode, die hauptsächlich zum Installieren von Softwaresammlungen verwendet wird. Für andere Vorgänge wie Löschen usw. muss der tatsächliche Name des Softwarepakets verwendet werden. Der Name des Softwarepakets in der Umgebung lautet:C/C++
gccgdbmakeD:\msys64\ucrt64\bin
pacman
MINGW64mingw-w64-x86_64-toolchain

pacman -Syu
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

Fügen Sie hier eine Bildbeschreibung ein

  • Fügen Sie den UCRT64Ordner binzu Umgebungsvariablen hinzu

UCRT64Der binOrdnerpfad lautet:D:\msys64\ucrt64\bin

Fügen Sie hier eine Bildbeschreibung ein

  • Testumgebung GCC_
gcc --version
g++ --version
gdb --version

Fügen Sie hier eine Bildbeschreibung ein

2. Installation und Konfiguration von Neovim

2.1 Neovim-Installation

  • wingetInstallieren Sie mitNeovim
winget search neovim
winget install Neovim.Neovim

Fügen Sie hier eine Bildbeschreibung ein

  • PackerZur Plugin-Verwaltung installieren
git clone https://github.com/wbthomason/packer.nvim "$env:LOCALAPPDATA\nvim-data\site\pack\packer\start\packer.nvim"

Fügen Sie hier eine Bildbeschreibung ein

2.2 Neovim konfigurieren

  • Verzeichnisaufbau

pluginund packer_compiled.luawerden Packernach der Initialisierung automatisch generiert.

nvim
├── init.lua
├── lua
│   ├── configs
│   │   ├── autopairs.lua
│   │   ├── cmp.lua
│   │   ├── gitsigns.lua
│   │   ├── kanagawa.lua
│   │   ├── lsp.lua
│   │   ├── lualine.lua
│   │   ├── mason-lsp.lua
│   │   ├── null-ls.lua
│   │   ├── toggleterm.lua
│   │   ├── transparent.lua
│   │   └── treesitter.lua
│   ├── maps.lua
│   ├── plugins.lua
│   └── settings.lua
└── plugin
    └── packer_compiled.lua

  • Umweltanforderungen
  • NerdFonts
  • Neovim> 0,8,0
  • NodeJS with npm
  • C/C++Umfeld
  • Git
  • init.luaDatei erstellen
mkdir nvim
cd nvim
vim init.lua
  • init.lua
require("settings")
require("plugins")
require("maps")

local themeStatus, kanagawa = pcall(require, "kanagawa")

if themeStatus then
  vim.cmd("colorscheme kanagawa")
else
  return
end

  • Editoreinstellungen hinzufügen
mkdir lua
cd lua
vim settings.lua
  • settings.lua
local global = vim.g
local o = vim.o

vim.scriptencoding = "utf-8"

-- Map <leader> = the space key

global.mapleader = " "
global.maplocalleader = " "

-- Editor option

o.number = true
o.relativenumber = true
o.clipboard = "unnamedplus"
o.syntax = "on"
o.autoindent = true
o.cursorline = true
o.expandtab = true
o.shiftwidth = 2
o.tabstop = 2
o.encoding = "utf-8"
o.ruler = true
o.mouse = "a"
o.title = true
o.hidden = true
o.ttimeoutlen = 0
o.wildmenu = true
o.showcmd = true
o.showmatch = true
o.inccommand = "split"
o.splitbelow = true
o.splitright = true
o.termguicolors = true
  • Plugin-Einstellungen hinzufügen
cd lua
vim plugins.lua
  • plugins.lua
-- Automatically run: PackerComplie
vim.api.nvim_create_autocmd("BufWritePost", {
	group = vim.api.nvim_create_augroup("PACKER", { clear = true }),
	pattern = "plugins.lua",
	command = "source <afile> | PackerCompile",
})

return require("packer").startup(function(use)
	-- Packer
	use("wbthomason/packer.nvim")

	-- Common utilities
	use("nvim-lua/plenary.nvim")

	-- Icons
	use("nvim-tree/nvim-web-devicons")

	-- Colorschema
	use("rebelot/kanagawa.nvim")

	-- Statusline
	use({
		"nvim-lualine/lualine.nvim",
		event = "BufEnter",
		config = function()
			require("configs.lualine")
		end,
		requires = { "nvim-web-devicons" },
	})

	-- Treesitter
	use({
		"nvim-treesitter/nvim-treesitter",
		run = function()
			require("configs.treesitter")
		end,
	})

	use({ "windwp/nvim-ts-autotag", after = "nvim-treesitter" })

	-- Telescope
	use({
		"nvim-telescope/telescope.nvim",
		tag = "0.1.1",
		requires = { { "nvim-lua/plenary.nvim" } },
	})

	--LSP
	use({
		"neovim/nvim-lspconfig",
		config = function()
			require("configs.lsp")
		end,
	})

	use("onsails/lspkind-nvim")
	use({
		"L3MON4D3/LuaSnip",
		tag = "v<CurrentMajor>.*",
	})

	-- cmp: Autocomplete
	use({
		"hrsh7th/nvim-cmp",
		event = "InsertEnter",
		config = function()
			require("configs.cmp")
		end,
	})

	use("hrsh7th/cmp-nvim-lsp")

	use({ "hrsh7th/cmp-path", after = "nvim-cmp" })

	use({ "hrsh7th/cmp-buffer", after = "nvim-cmp" })

	-- LSP diagnosticsm, code actions, and more via lua
	use({
		"jose-elias-alvarez/null-ls.nvim",
		config = function()
			require("configs.null-ls")
		end,
		requires = { "nvim-lua/plenary.nvim" },
	})

	-- Mason: Portable package manager
	use({
		"williamboman/mason.nvim",
		config = function()
			require("mason").setup()
		end,
	})

	use({
		"williamboman/mason-lspconfig.nvim",
		config = function()
			require("configs.mason-lsp")
		end,
		after = "mason.nvim",
	})

	-- File manager
	use({
		"nvim-neo-tree/neo-tree.nvim",
		branch = "v2.x",
		requires = {
			"nvim-lua/plenary.nvim",
			"nvim-tree/nvim-web-devicons",
			"MunifTanjim/nui.nvim",
		},
	})

	-- Show colors
	use({
		"norcalli/nvim-colorizer.lua",
		config = function()
			require("colorizer").setup({ "*" })
		end,
	})

	-- Terminal
	use({
		"akinsho/toggleterm.nvim",
		tag = "*",
		config = function()
			require("configs.toggleterm")
		end,
	})

	-- Git
	use({
		"lewis6991/gitsigns.nvim",
		config = function()
			require("configs.gitsigns")
		end,
	})

	-- Markdown Preview
	use({
		"iamcco/markdown-preview.nvim",
		run = function()
			vim.fn["mkdp#utl#install"]()
		end,
	})

	-- autopairs
	use({
		"windwp/nvim-autopairs",
		config = function()
			require("configs.autopairs")
		end,
	})

	-- Backgroud Transparent
	use({
		"xiyaowong/nvim-transparent",
		config = function()
			require("configs.transparent")
		end,
	})
end)

  • Fügen Sie Plugin-Parametereinstellungen hinzu
mkdir configs
cd configs
vim autopairs.lua
vim cmp.lua
vim gitsigns.lua
vim kanagawa.lua
vim lsp.lua
vim lualine.lua
vim mason-lsp.lua
vim null-ls.lua
vim toggleterm.lua
vim treesitter.lua
  • autopairs.lua
local status, autopairs = pcall(require, "nvim-autopairs")
if not status then
  return
end

autopairs.setup({
  diable_filetype = { "TelescopePrompt", "vim" },
})

  • cmp.lua
local status, cmp = pcall(require, "cmp")
if not status then
	return
end

local lspkind = require("lspkind")

cmp.setup({
	snippet = {
		expand = function(args)
			require("luasnip").lsp_expand(args.body)
		end,
	},
	mapping = cmp.mapping.preset.insert({
		["<C-d>"] = cmp.mapping.scroll_docs(-4),
		["<C-f>"] = cmp.mapping.scroll_docs(4),
		["<C-Space>"] = cmp.mapping.complete(),
		["<C-e>"] = cmp.mapping.close(),
		["<CR>"] = cmp.mapping.confirm({
			behavior = cmp.ConfirmBehavior.Replace,
			select = true,
		}),
	}),
	sources = cmp.config.sources({
		{ name = "nvim_lsp" },
		{ name = "buffer" },
	}),
})

vim.cmd([[
  set completeopt=menuone,noinsert,noselect
  highlight! default link CmpItemKind CmpItemMenuDefault
]])

  • gitsigns.lua
local status, gitsigns = pcall(require, "gitsigns")

if not status then
	return
end

gitsigns.setup({
	signs = {
		add = { text = "│" },
		change = { text = "│" },
		delete = { text = "_" },
		topdelete = { text = "‾" },
		changedelete = { text = "~" },
		untracked = { text = "┆" },
	},
	signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
	numhl = false, -- Toggle with `:Gitsigns toggle_numhl`
	linehl = false, -- Toggle with `:Gitsigns toggle_linehl`
	word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
	watch_gitdir = {
		interval = 1000,
		follow_files = true,
	},
	attach_to_untracked = true,
	current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
	current_line_blame_opts = {
		virt_text = true,
		virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align'
		delay = 1000,
		ignore_whitespace = false,
	},
	current_line_blame_formatter = "<author>, <author_time:%Y-%m-%d> - <summary>",
	sign_priority = 6,
	update_debounce = 100,
	status_formatter = nil, -- Use default
	max_file_length = 40000, -- Disable if file is longer than this (in lines)
	preview_config = {
		-- Options passed to nvim_open_win
		border = "single",
		style = "minimal",
		relative = "cursor",
		row = 0,
		col = 1,
	},
	yadm = {
		enable = false,
	},
})
  • kanagawa.lua
local status, kanagawa = pcall(require, "kanagawa")

if not status then
	return
end

kanagawa.setup({
	undercurl = true, -- enable undercurls
	commentStyle = { italic = true },
	functionStyle = {},
	keywordStyle = { italic = true },
	statementStyle = { bold = true },
	typeStyle = {},
	variablebuiltinStyle = { italic = true },
	specialReturn = true, -- special highlight for the return keyword
	specialException = true, -- special highlight for exception handling keywords
	transparent = false, -- do not set background color
	dimInactive = false, -- dim inactive window `:h hl-NormalNC`
	globalStatus = false, -- adjust window separators highlight for laststatus=3
	terminalColors = true, -- define vim.g.terminal_color_{0,17}
	colors = {},
	overrides = {},
	theme = "default", -- Load "default" theme or the experimental "light" theme
})

  • lsp.lua
local status, nvim_lsp = pcall(require, "lspconfig")
if not status then
	return
end

local protocol = require("vim.lsp.protocol")

local on_attach = function(client, bufnr)
	-- format on save
	if client.server_capabilities.documentFormattingProvider then
		vim.api.nvim_create_autocmd("BufWritePre", {
			group = vim.api.nvim_create_augroup("Format", { clear = true }),
			buffer = bufnr,
			callback = function()
				vim.lsp.buf.formatting_seq_sync()
			end,
		})
	end
end

local capabilities = require("cmp_nvim_lsp").default_capabilities()

-- TypeScript
nvim_lsp.tsserver.setup({
	on_attach = on_attach,
	capabilities = capabilities,
})

-- CSS
nvim_lsp.cssls.setup({
	on_attach = on_attach,
	capabilities = capabilities,
})

-- Tailwind
nvim_lsp.tailwindcss.setup({
	on_attach = on_attach,
	capabilities = capabilities,
})

-- HTML
nvim_lsp.html.setup({
	on_attach = on_attach,
	capabilities = capabilities,
})

-- JSON
nvim_lsp.jsonls.setup({
	on_attach = on_attach,
	capabilities = capabilities,
})

-- Eslint
nvim_lsp.eslint.setup({
	on_attach = on_attach,
	capabilities = capabilities,
})

-- Python
nvim_lsp.pyright.setup({
	on_attach = on_attach,
	capabilities = capabilities,
})
  • vim lualine.lua
local status, lualine = pcall(require, "lualine")
if not status then
	return
end

lualine.setup({
	options = {
		icons_enabled = true,
		theme = "powerline",
		component_separators = { left = "", right = "" },
		section_separators = { left = "", right = "" },
		disabled_filetypes = {
			statusline = {},
			winbar = {},
		},
		ignore_focus = {},
		always_divide_middle = true,
		globalstatus = false,
		refresh = {
			statusline = 1000,
			tabline = 1000,
			winbar = 1000,
		},
	},
	sections = {
		lualine_a = { "mode" },
		lualine_b = { "branch", "diff", "diagnostics" },
		lualine_c = { "filename" },
		lualine_x = { "encoding", "fileformat", "filetype" },
		lualine_y = { "progress" },
		lualine_z = { "location" },
	},
	inactive_sections = {
		lualine_a = {},
		lualine_b = {},
		lualine_c = { "filename" },
		lualine_x = { "location" },
		lualine_y = {},
		lualine_z = {},
	},
	tabline = {},
	winbar = {},
	inactive_winbar = {},
	extensions = {},
})
  • mason-lsp.lua
local status, masonlsp = pcall(require, "mason-lspconfig")

if not status then
  return
end

masonlsp.setup({
  automatic_installation = true,
  ensure_installed = {
    "cssls",
    "eslint",
    "html",
    "jsonls",
    "tsserver",
    "pyright",
    "tailwindcss",
  },
})
  • null-ls.lua
local status, nls = pcall(require, "null-ls")

if not status then
	return
end

local augroup = vim.api.nvim_create_augroup("LspFormatting", {})

local fmt = nls.builtins.formatting
local dgn = nls.builtins.diagnostics
local cda = nls.builtins.code_actions

nls.setup({
	sources = {

		-- Formatting
		fmt.prettierd,
		fmt.eslint_d,
		fmt.prettier.with({
			filetypes = { "html", "json", "yaml", "markdown", "javascript", "typescript" },
		}),
		fmt.stylua,
		fmt.rustfmt,

		-- Diagnostics
		dgn.eslint_d,
		dgn.shellcheck,
		dgn.pylint.with({
			method = nls.methods.DIAGNOSTICS_ON_SAVE,
		}),

		-- Code Actions
		cda.eslint_d,
		cda.shellcheck,
	},
	on_attach = function(client, bufnr)
		if client.supports_method("textDocument/formatting") then
			vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
			vim.api.nvim_create_autocmd("BufWritePre", {
				group = augroup,
				buffer = bufnr,
				callback = function()
					vim.lsp.buf.format({ bufnr = bufnr })
				end,
			})
		end
	end,
})

  • toggleterm.lua
local status, toggleterm = pcall(require, "toggleterm")

if not status then
	return
end

toggleterm.setup({
	size = 10,
	open_mapping = [[<F7>]],
	shading_factor = 2,
	direction = "float",
	float_opts = {
		border = "curved",
		highlights = {
			border = "Normal",
			background = "Normal",
		},
	},
})
  • treesitter.lua
local status, ts = pcall(require, "nvim-treesitter.configs")
if not status then
	return
end

ts.setup({
	highlight = {
		enable = true,
		additional_vim_regex_highlighting = false,
	},
	context_commentstring = {
		enable = true,
		enable_autocmd = false,
	},
	ensure_installed = {
		"markdown",
		"tsx",
		"typescript",
		"javascript",
		"toml",
		"c_sharp",
		"json",
		"yaml",
		"rust",
		"css",
		"html",
		"lua",
	},
	rainbow = {
		enable = true,
		disable = { "html" },
		extended_mode = false,
		max_file_lines = nil,
	},
	autotag = { enable = true },
	incremental_selection = { enable = true },
	indent = { enable = true },
})

local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
parser_config.tsx.filetype_to_parsername = { "javascript", "typescript.tsx" }
  • PIugin installieren

Verwenden Sie nach der Eingabe Neovimden Befehl:PackerSync

Fügen Sie hier eine Bildbeschreibung ein

  • Legen Sie Tastenkombinationen fest
cd lua
vim maps.lua
  • maps.lua
local function map(mode, lhs, rhs)
  vim.keymap.set(mode, lhs, rhs, { silent = true })
end

local status, telescope = pcall(require, "telescope.builtin")
if status then
  -- telescope
  map("n", "<leader>ff", telescope.find_files)
  map("n", "<leader>fg", telescope.live_grep)
  map("n", "<leader>fb", telescope.buffers)
  map("n", "<leader>fh", telescope.help_tags)
  map("n", "<leader>fs", telescope.git_status)
  map("n", "<leader>fc", telescope.git_commits)
else
  print("Telexcope not found")
end

-- Save
map("n", "<leader>w", "<CMD>update<CR>")

-- Quit
map("n", "<leader>q", "<CMD>q<CR>")

-- Exit insert mode
map("i", "jk", "<ESC>")

-- Windows
map("n", "<leader>ñ", "<CMD>vsplit<CR>")
map("n", "<leader>n", "<CMD>split<CR>")

-- Neotree
map("n", "<leader>e", "<CMD>Neotree toggle<CR>")
map("n", "<leader>o", "<CMD>Neotree focus<CR>")

-- buffer
map("n", "<TAB>", "<CMD>bnext<CR>")
map("n", "<S-TAB>", "<CMD>bprevious<CR>")

-- Ternimal
map("n", "<leader>th", "<CMD>ToggleTerm size=10 direction=horizontal<CR>")
map("n", "<leader>tv", "<CMD>ToggleTerm size=80 direction=vertical<CR>")

-- Markdown Preview
map("n", "<leader>m", "<CMD>MarkdownPreview<CR>")
map("n", "<leader>mn", "<CMD>MarkdownPreviewStop<CR>")

-- Windows Navigation
map("n", "<C-h>", "<C-w>h")
map("n", "<C-l>", "<C-w>l")
map("n", "<C-k>", "<C-w>k")
map("n", "<C-j>", "<C-w>j")

-- Resize Windows
map("n", "<C-Left>", "<C-w><")
map("n", "<C-Right>", "<C-w>>")
map("n", "<C-Up>", "<C-w>+")
map("n", "<C-Down>", "<C-w>-")

3. Mögliche Komplikationen und Komplikationen

3.1 Befehl stylua ist nicht ausführbar (stellen Sie sicher, dass er installiert ist und sich in Ihrem $PATH befindet)

Um einzugeben Neovim, verwenden Sie den Befehl:MasonInstall stylua

Verweise

  1. Installation und Konfiguration von Neovim unter Windows 10
  2. Meine modernisierte Neovim-Konfiguration
  3. learn-neovim-lua
  4. Einführung und Verwendung von MSYS2
  5. So installieren Sie C- und C++-Compiler unter Windows
  6. Terminals-MSYS2
  7. Leitfaden zum Erstellen einer neuen C/C++-Umgebung (VSCode und MSYS2)
  8. Windows-Terminal msys2 hinzufügen
  9. MSYS2 + Windows Terminal + Oh My Zsh
  10. Detaillierte Erklärung des Pacman-Befehls
  11. Verwenden Sie msys2, um eine elegante Entwicklungsumgebung zu erstellen
  12. Einrichtung der MSYS2-Entwicklungsumgebung
  13. Neue Umgebung in msys2: Die neue Umgebung, die von msys2 eingeführt wurde
  14. Einrichtung der MSYS2-Entwicklungsumgebung
  15. GCC und MinGW-w64 für Windows
  16. Windows-Installation der msys2 gcc C++-Entwicklungsumgebung
  17. Installieren Sie gcc/clang über msys2/mingw unter Windows
  18. MSYS2 installiert gcc und erstellt die Umgebung
  19. Windows Terminal + MSYS2-Konfiguration
  20. Verwenden Sie Neovim, um eine coole IDE-Tastenkombinationskonfiguration zu erstellen
  21. Tastenkombinationsnotizen für einige Neovim-Plug-Ins
  22. eslint_d: Der Befehl eslint_d ist nicht ausführbar (stellen Sie sicher, dass er installiert ist und sich in Ihrem $PATH befindet).
  23. Machen Sie Neovim komfortabler beim Schreiben von Code
  24. Windows Terminal + MSYS2-Konfiguration
  25. slydragonn/dotfiles
  26. Kein C-Compiler gefunden
  27. Neovim Learning 1: Plug-in-Verwaltung und -Konfiguration
  28. Packer, der König der Plugin-Manager
  29. Präfixschlüssel für VIM-Studiennotizen (Leiter)
  30. Modernes Neovim-Konfigurations-(3)-Plugin-Management
  31. Verwaltung und Konfiguration des Neovim-Plug-Ins
  32. neovim-Konfigurationsplan im Jahr 2022
  33. nanofrog/learn-neovim-lua
  34. Konfiguration der Neovim-Tastenkombinationen
  35. nvim erstellt eine Entwicklungsumgebung, die zu Ihnen passt
  36. Neovim-Konfigurationspraxis: Erstellen Sie Ihre eigene IDE von 0 auf 1
  37. Alles, was Sie brauchen, um neovim mit Lua zu konfigurieren
  38. Dokumentation: ~/.local/share/nvim/site/pack oder ~/.config/nvim/pack ?
  39. Installation und Verwendung des Vim-Plug-Plug-Ins
  40. Zusammenfassung der vim-Konfiguration
  41. NeoVim-Aufstiegsprozess
  42. nvim-Konfigurationsdatei
  43. Machen Sie Ihr Neovim so leistungsstark wie eine IDE
  44. Neovim-Grundkonfiguration

Ich denke du magst

Origin blog.csdn.net/Y1575071736/article/details/130086092
Empfohlen
Rangfolge