最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解Linux下如何在vim里使用異步編譯和運(yùn)行

 更新時(shí)間:2025年10月12日 14:13:35   作者:uxiang_blog  
這篇文章主要介紹了如何在Linux的vim編輯器中使用異步編譯和運(yùn)行C++程序,具體功能包括在vim中直接構(gòu)建和運(yùn)行單個(gè)文件或整個(gè)項(xiàng)目,使用快捷鍵如F9、F10、F7、F8和F6進(jìn)行操作,此外,提到了使用兩個(gè)vim插件來實(shí)現(xiàn)這些功能,并提供了必要的配置文件和命令信息

我打算在vim所打開的文件中直接編譯運(yùn)行cpp,無需一直切換窗口, 所使用的是llvm流.

功能:

當(dāng)只有一個(gè)文件時(shí),在vim所打開的main.cpp中無需離開按下F9就構(gòu)建當(dāng)前文件,按下F10就可以運(yùn)行當(dāng)前文件.
當(dāng)整個(gè)項(xiàng)目中(有多個(gè)文件),在vim所打開的main.cpp中無需離開只需按下F7構(gòu)建整個(gè)項(xiàng)目, 按下F8就運(yùn)行整個(gè)項(xiàng)目,按下F6只生成一個(gè)a.out的調(diào)式文件, 需要離開vim在bash下調(diào)試.

先決條件:

(有g(shù)db,make,和vim也可以)

echo "======= 開發(fā)工具版本檢查 =======" && \
echo "=== Clang 編譯器 ===" && clang++ --version && \
echo -e "\n=== LLDB 調(diào)試器 ===" && lldb --version && \
echo -e "\n=== LLD 鏈接器 ===" && ld.lld --version && \
echo -e "\n=== Make 構(gòu)建工具 ===" && make --version

在這里插入圖片描述

目錄結(jié)構(gòu):

~/
├── .vim/               # Vim 配置目錄
├── .vimrc              # Vim 主配置文件
│ ├── tasks.ini         # AsyncTask 任務(wù)定義
│ └── plugin/           # Vim 插件目錄
│ 		├── asyncrun.vim   # 異步運(yùn)行插件
│ 		└── asynctasks.vim # 異步任務(wù)插件
├── cpp/                # C++ 項(xiàng)目主目錄
│ ├── Fraction.h        # 分?jǐn)?shù)類頭文件
│ ├── Fraction.cpp      # 分?jǐn)?shù)類實(shí)現(xiàn)
│ ├── main.cpp          # 主程序文件
│ └── Makefile          # 構(gòu)建配置
└── README.md           # 項(xiàng)目說明文檔

兩個(gè)vim插件信息,是韋易笑大佬寫的vim異步插件

"======================================================================
" asyncrun.vim - Run shell commands in background and output to quickfix
"
" Maintainer: skywind3000 (at) gmail.com, 2016-2024
" Homepage: https://github.com/skywind3000/asyncrun.vim
"
" Last Modified: 2025/03/24 10:50:34
"======================================================================
"======================================================================
"
" asynctasks.vim - Modern Task System for Vim
"
" Maintainer: skywind3000 (at) gmail.com, 2020-2021
"
" Last Modified: 2024/06/18 16:30
" Verision: 1.9.19
"
" For more information, please visit:
" https://github.com/skywind3000/asynctasks.vim
"
"======================================================================

配置文件

.vimrc

" ==================== 基礎(chǔ)設(shè)置 ====================
" 啟用語法高亮
syntax on
" 搜索時(shí)實(shí)時(shí)顯示匹配結(jié)果
set incsearch

" ==================== 縮進(jìn)設(shè)置 ====================
" Tab 鍵顯示為4個(gè)空格寬度
set tabstop=4
" 自動(dòng)縮進(jìn)時(shí)使用4個(gè)空格
set shiftwidth=4
" 退格鍵刪除4個(gè)空格
set softtabstop=4
" 禁用粘貼模式(確保正??s進(jìn))
set nopaste
" 智能縮進(jìn)
set smartindent
" 自動(dòng)縮進(jìn)
set autoindent

" ==================== 狀態(tài)欄設(shè)置 ====================
" 總是顯示狀態(tài)欄
set laststatus=2
" 狀態(tài)欄格式:
" %n: 緩沖區(qū)編號
" %F: 完整文件路徑  
" %m: 修改標(biāo)志
" %r: 只讀標(biāo)志
" %{}: 日期時(shí)間
" %l/%L: 當(dāng)前行/總行數(shù)
" %c: 列號
" %p%%: 百分比
set statusline=%n:\ %<%F%m%r\ %{strftime(\"%H:%M\ %a\ %b\%d\ %Y\")}\ %=\ %l/%L:%c\ %p%%

" ==================== 文件類型設(shè)置 ====================
" 啟用文件類型插件
filetype plugin on
" 啟用文件類型縮進(jìn)
filetype indent on

" ==================== AsyncTask 項(xiàng)目級任務(wù)映射 ====================
" F6: 調(diào)試整個(gè)項(xiàng)目(使用 lldb)
noremap <silent><f6> :AsyncTask project-debug<cr>
" F7: 構(gòu)建整個(gè)項(xiàng)目(編譯所有文件)
noremap <silent><f7> :AsyncTask project-build<cr>
" F8: 運(yùn)行整個(gè)項(xiàng)目(執(zhí)行生成的可執(zhí)行文件)
noremap <silent><f8> :AsyncTask project-run<cr>

" ==================== AsyncTask 文件級任務(wù)映射 ====================
" F9: 構(gòu)建當(dāng)前文件(只編譯當(dāng)前編輯的文件)
noremap <silent><f9> :AsyncTask file-build<cr>
" F10: 運(yùn)行當(dāng)前文件(編譯并運(yùn)行當(dāng)前文件)
noremap <silent><f10> :AsyncTask file-run<cr>

task.ini

# ==================== 項(xiàng)目級任務(wù) ====================
# 項(xiàng)目構(gòu)建任務(wù) - 對應(yīng) F7 快捷鍵
[project-build]
command=make project-build
errorformat=%f:%l:%c: %m
output=quickfix
cwd=$(VIM_ROOT)          # 修正:項(xiàng)目任務(wù)應(yīng)該在項(xiàng)目根目錄
save=2

# 項(xiàng)目運(yùn)行任務(wù) - 對應(yīng) F8 快捷鍵
[project-run]
command=make project-run
output=terminal          # 修正:運(yùn)行結(jié)果應(yīng)該輸出到終端
cwd=$(VIM_ROOT)          # 修正:項(xiàng)目任務(wù)應(yīng)該在項(xiàng)目根目錄
save=2

# 項(xiàng)目調(diào)試任務(wù) - 對應(yīng) F6 快捷鍵
[project-debug]
command=make project-debug
output=terminal          # 修正:調(diào)試器應(yīng)該輸出到終端
cwd=$(VIM_ROOT)          # 修正:項(xiàng)目任務(wù)應(yīng)該在項(xiàng)目根目錄
save=2

# ==================== 文件級任務(wù) ====================
# 文件構(gòu)建任務(wù) - 對應(yīng) F9 快捷鍵
[file-build]
command=make file-build
output=quickfix
errorformat=%f:%l:%c: %m  # 修正:需要設(shè)置錯(cuò)誤格式
cwd=$(VIM_FILEDIR)        # 正確:文件任務(wù)在當(dāng)前文件目錄
save=2

# 文件運(yùn)行任務(wù) - 對應(yīng) F10 快捷鍵
[file-run]
command=make file-run
output=terminal            # 修正:運(yùn)行結(jié)果應(yīng)該輸出到終端
errorformat=%f:%l:%c: %m  # 修正:需要設(shè)置錯(cuò)誤格式
cwd=$(VIM_FILEDIR)        # 正確:文件任務(wù)在當(dāng)前文件目錄
save=2

makefile

CXX = clang++
CXXFLAGS = -Wall -Weffc++ -Wextra -Wconversion -Wsign-conversion -g -std=c++23
LDFLAGS = -fuse-ld=lld

# 項(xiàng)目級配置
PROJECT_TARGET = a.out
PROJECT_SRCS = $(wildcard *.cpp)
PROJECT_OBJS = $(PROJECT_SRCS:.cpp=.o)
PROJECT_HEADERS = $(wildcard *.h)

# 文件級配置
CURRENT_FILE = $(VIM_FILENAME)
CURRENT_TARGET = $(basename $(CURRENT_FILE))
CURRENT_OBJ = $(CURRENT_TARGET).o

# 默認(rèn)目標(biāo)
all: project-build

# ==================== 項(xiàng)目級目標(biāo) ====================
# 構(gòu)建整個(gè)項(xiàng)目
project-build: $(PROJECT_TARGET)

$(PROJECT_TARGET): $(PROJECT_OBJS)
    $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^
    @echo "=== PROJECT BUILD: All files compiled ==="
    @echo "Target: $(PROJECT_TARGET)"
    @echo "Sources: $(PROJECT_SRCS)"

# 運(yùn)行整個(gè)項(xiàng)目
project-run: project-build
    @echo "=== PROJECT RUN: Running $(PROJECT_TARGET) ==="
    ./$(PROJECT_TARGET)
    @echo "=== Program finished (exit code: $$?) ==="

# 項(xiàng)目調(diào)試
project-debug: project-build
    @echo "=== PROJECT DEBUG: Starting debugger ==="
    lldb $(PROJECT_TARGET)

# ==================== 文件級目標(biāo) ====================
# 只編譯當(dāng)前文件
file-build:
    @echo "=== FILE BUILD: Compiling $(CURRENT_FILE) only ==="
    $(CXX) $(CXXFLAGS) -c $(CURRENT_FILE) -o $(CURRENT_OBJ)
    @echo "Generated: $(CURRENT_OBJ)"
# 編譯并運(yùn)行當(dāng)前單個(gè)文件(獨(dú)立程序)
file-run:
    @echo "=== FILE RUN: Compiling and running $(CURRENT_FILE) ==="
    $(CXX) $(CXXFLAGS) $(CURRENT_FILE) -o $(CURRENT_TARGET)
    @echo "Running: ./$(CURRENT_TARGET)"
    ./$(CURRENT_TARGET)
    @echo "=== Single file execution finished ==="

# 文件級調(diào)試
file-debug:
    @echo "=== FILE DEBUG: Debugging $(CURRENT_FILE) ==="
    $(CXX) $(CXXFLAGS) $(CURRENT_FILE) -g -o $(CURRENT_TARGET)
    lldb $(CURRENT_TARGET)

# ==================== 通用規(guī)則 ====================
# 項(xiàng)目級編譯規(guī)則
%.o: %.cpp $(PROJECT_HEADERS)
    $(CXX) $(CXXFLAGS) -c $< -o $@

# 清理
clean:
    rm -f $(PROJECT_OBJS) $(PROJECT_TARGET) *.o $(basename $(wildcard *.cpp))
    @echo "=== Clean completed ==="

# 顯示信息
info:
    @echo "=== Project Info ==="
    @echo "Project target: $(PROJECT_TARGET)"
    @echo "Project sources: $(PROJECT_SRCS)"
    @echo "Current file: $(CURRENT_FILE)"
    @echo "Current target: $(CURRENT_TARGET)"

.PHONY: all clean project-build project-run project-debug file-build file-run file-debug info

演示

在這里插入圖片描述

F7構(gòu)建整個(gè)項(xiàng)目

在這里插入圖片描述

F8運(yùn)行整個(gè)項(xiàng)目

在這里插入圖片描述

F6調(diào)式(帶-g)生成的a.out 會(huì)覆蓋之前的可執(zhí)行文件a.out,這個(gè)可用作lldb來調(diào)式程序.

在這里插入圖片描述

接著就可以調(diào)式了

在這里插入圖片描述

單文件同上.

注意:quickfix設(shè)置了只顯示6行,如果要查看更詳細(xì)的信息,按下Ctrl+w+w在當(dāng)前vim和quickfix窗口切換.如果發(fā)現(xiàn)沒有quickfix出來,就在vim命令模式下用:copen打開.

在這里插入圖片描述

以上就是一文詳解Linux下如何在vim里使用異步編譯和運(yùn)行的詳細(xì)內(nèi)容,更多關(guān)于Linux vim里使用異步編譯和運(yùn)行的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Linux獲取線程的PID(TID、LWP)的幾種方式

    詳解Linux獲取線程的PID(TID、LWP)的幾種方式

    這篇文章主要介紹了詳解Linux獲取線程的PID(TID、LWP)的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Linux上安裝搭建Nginx服務(wù)器的詳細(xì)步驟

    Linux上安裝搭建Nginx服務(wù)器的詳細(xì)步驟

    本篇文章主要介紹了Linux上搭建Nginx服務(wù)器的詳細(xì)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • 簡單談?wù)刢entos7中配置php

    簡單談?wù)刢entos7中配置php

    windows server2008下搭建PHP運(yùn)行環(huán)境,用IIS+PHP或者phpstudy,或wamp。今天試了試,在linux下搭建php運(yùn)行環(huán)境。感覺還不錯(cuò)。
    2018-06-06
  • linux mount報(bào)錯(cuò):you must specify the filesystem type的解決方法

    linux mount報(bào)錯(cuò):you must specify the filesystem type的解決方法

    這篇文章主要介紹了linux mount報(bào)錯(cuò):you must specify the filesystem type的解決方法,文中給出了詳細(xì)的解決方法示例,對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Linux中df -h與lsblk顯示不一致問題的解決方法

    Linux中df -h與lsblk顯示不一致問題的解決方法

    文章記錄了在Linux系統(tǒng)中遇到lsblk和df-h顯示磁盤容量不一致的問題,并通過排查發(fā)現(xiàn)是XFS文件系統(tǒng)未隨著磁盤擴(kuò)容而自動(dòng)擴(kuò)展,文章最終通過使用xfs_growfs命令解決了問題,并詳細(xì)描述了排查過程、問題原因及解決方法,需要的朋友可以參考下
    2026-04-04
  • linux下shell腳本啟動(dòng)jar包實(shí)現(xiàn)過程

    linux下shell腳本啟動(dòng)jar包實(shí)現(xiàn)過程

    確保APP_NAME和LOG_FILE位于目錄內(nèi),首次啟動(dòng)前需手動(dòng)創(chuàng)建log文件夾,否則報(bào)錯(cuò),此為個(gè)人經(jīng)驗(yàn),供參考,歡迎支持腳本之家
    2025-07-07
  • Linux系統(tǒng)交換空間介紹

    Linux系統(tǒng)交換空間介紹

    今天小編就為大家分享一篇關(guān)于Linux系統(tǒng)交換空間介紹的文章,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-09-09
  • 服務(wù)器間如何實(shí)現(xiàn)scp免密文件傳輸

    服務(wù)器間如何實(shí)現(xiàn)scp免密文件傳輸

    文章介紹了如何在本地電腦或源服務(wù)器上生成SSH密鑰,并將其復(fù)制到遠(yuǎn)程服務(wù)器上,以實(shí)現(xiàn)免密碼登錄,此外,還介紹了如何使用SCP命令在本地和遠(yuǎn)程服務(wù)器之間傳輸文件
    2025-02-02
  • CentOs 7.*中配置安裝phpMyAdmin的完整步驟記錄

    CentOs 7.*中配置安裝phpMyAdmin的完整步驟記錄

    phpMyAdmin是一個(gè)以PHP為基礎(chǔ),以Web-Base方式架構(gòu)在網(wǎng)站主機(jī)上的MySQL的資料庫管理工具。下面這篇文章主要給大家介紹了關(guān)于CentOs 7.*中配置安裝phpMyAdmin的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-07-07
  • 在Ubuntu系統(tǒng)中快速查看apt包信息的多種方法

    在Ubuntu系統(tǒng)中快速查看apt包信息的多種方法

    本文介紹了在Ubuntu系統(tǒng)中快速查看軟件包信息的多種方法,主要包括:使用apt show或apt-cache show查看包的基本信息,通過 dpkg 命令查詢已安裝包的文件列表或命令對應(yīng)的包,以及利用在線資源獲取更詳細(xì)信息,文章還提供了一個(gè)標(biāo)準(zhǔn)操作流程,需要的朋友可以參考下
    2026-01-01

最新評論

惠东县| 安塞县| 出国| 景东| 临桂县| 西乡县| 拜泉县| 珲春市| 呼图壁县| 社旗县| 年辖:市辖区| 禹城市| 金川县| 越西县| 梁平县| 通山县| 神池县| 吉隆县| 平罗县| 萨迦县| 溆浦县| 岢岚县| 民县| 莫力| 从化市| 镇原县| 公安县| 广南县| 伊金霍洛旗| 南平市| 右玉县| 蓬安县| 永靖县| 兴化市| 瑞昌市| 隆回县| 云浮市| 南召县| 延津县| 鄱阳县| 乐清市|