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

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

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

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

功能:

當只有一個文件時,在vim所打開的main.cpp中無需離開按下F9就構建當前文件,按下F10就可以運行當前文件.
當整個項目中(有多個文件),在vim所打開的main.cpp中無需離開只需按下F7構建整個項目, 按下F8就運行整個項目,按下F6只生成一個a.out的調式文件, 需要離開vim在bash下調試.

先決條件:

(有gdb,make,和vim也可以)

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

在這里插入圖片描述

目錄結構:

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

兩個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

" ==================== 基礎設置 ====================
" 啟用語法高亮
syntax on
" 搜索時實時顯示匹配結果
set incsearch

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

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

" ==================== 文件類型設置 ====================
" 啟用文件類型插件
filetype plugin on
" 啟用文件類型縮進
filetype indent on

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

" ==================== AsyncTask 文件級任務映射 ====================
" F9: 構建當前文件(只編譯當前編輯的文件)
noremap <silent><f9> :AsyncTask file-build<cr>
" F10: 運行當前文件(編譯并運行當前文件)
noremap <silent><f10> :AsyncTask file-run<cr>

task.ini

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

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

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

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

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

makefile

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

# 項目級配置
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

# 默認目標
all: project-build

# ==================== 項目級目標 ====================
# 構建整個項目
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)"

# 運行整個項目
project-run: project-build
    @echo "=== PROJECT RUN: Running $(PROJECT_TARGET) ==="
    ./$(PROJECT_TARGET)
    @echo "=== Program finished (exit code: $$?) ==="

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

# ==================== 文件級目標 ====================
# 只編譯當前文件
file-build:
    @echo "=== FILE BUILD: Compiling $(CURRENT_FILE) only ==="
    $(CXX) $(CXXFLAGS) -c $(CURRENT_FILE) -o $(CURRENT_OBJ)
    @echo "Generated: $(CURRENT_OBJ)"
# 編譯并運行當前單個文件(獨立程序)
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 ==="

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

# ==================== 通用規(guī)則 ====================
# 項目級編譯規(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構建整個項目

在這里插入圖片描述

F8運行整個項目

在這里插入圖片描述

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

在這里插入圖片描述

接著就可以調式了

在這里插入圖片描述

單文件同上.

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

在這里插入圖片描述

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

相關文章

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

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

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

    Linux上安裝搭建Nginx服務器的詳細步驟

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

    簡單談談centos7中配置php

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

    linux mount報錯:you must specify the filesystem type的解決方法

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

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

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

    linux下shell腳本啟動jar包實現(xiàn)過程

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

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

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

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

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

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

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

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

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

最新評論

紫阳县| 合阳县| 元阳县| 古浪县| 文登市| 内黄县| 岳西县| 娱乐| 清涧县| 武隆县| 十堰市| 句容市| 府谷县| 连城县| 科尔| 宁明县| 海林市| 潞西市| 大洼县| 和平县| 广宗县| 宣恩县| 宾川县| 太保市| 庆安县| 德州市| 安塞县| 达日县| 徐汇区| 闽侯县| 定边县| 银川市| 伊通| 赤壁市| 枣阳市| 沙坪坝区| 内丘县| 兴安盟| 大宁县| 吐鲁番市| 汝城县|