更新neovim配置

This commit is contained in:
a770 2025-01-19 22:17:41 +08:00
parent 926899e09a
commit 23ac44ae4e
34 changed files with 408 additions and 1312 deletions

View file

@ -1 +0,0 @@
# These are custom snippets that suit my needs

View file

@ -1,7 +0,0 @@
global !p
from vimsnippets import get_comment_format
endglobal
snippet todo "TODO comment" bw
`!p snip.rv=get_comment_format()[0]` TODO: ${2:Something} $0${3: <${4:`!v strftime('%m/%d, %Y')`}${5:, `!v g:snips_author`}>} `!p snip.rv=get_comment_format()[2]`
endsnippet

View file

@ -1,13 +0,0 @@
snippet cm "Comment Section"
/* ${0} */
endsnippet
snippet st "printf"
printf(${0});
endsnippet
snippet inc "Includes"
#include <stdio.h>
#include <stdlib.h>
endsnippet

View file

@ -1,11 +0,0 @@
snippet main "Public main class"
public static void Main()
{
System.Console.WriteLine("Hello");
}
endsnippet
snippet st "println"
System.Console.WriteLine(${0});
endsnippet

View file

@ -1,571 +0,0 @@
snippet imat "Import Material"
import 'package:flutter/material.dart';
endsnippet
snippet context "BuildContext" i
BuildContext context
endsnippet
snippet fn "Async Function"
void ${1:func}() {
${0}
}
endsnippet
snippet afn "Async Function"
Future<void> ${1:func}() async {
${0}
}
endsnippet
snippet wfunc "Widget Function"
Widget build${1:Widget}() {
return ${0:Container()};
}
endsnippet
snippet el "} else {"
} else {
endsnippet
snippet elif "} else if () {"
} else if (${0}) {
endsnippet
snippet msa "MaterialStateProperty.all"
MaterialStateProperty.all(${0}),
endsnippet
snippet msr "MaterialStateProperty.resolveWith"
MaterialStateProperty.resolveWith<${1}>((states) => states.contains(MaterialState.pressed) ? null : null),
endsnippet
snippet wh "Width and height"
width: ${1},
height: ${0},
endsnippet
snippet iwh "Infinity Width and height"
width: double.infinity,
height: double.infinity,
endsnippet
snippet oprs "onPressed"
final void Function() onPressed;
endsnippet
snippet pa "Padding"
padding: EdgeInsets.only(${1:left: ${2:0}}${3:, right: ${4:0}}${5:, top: ${6:0}}${7:, bottom: ${8:0}}),
endsnippet
snippet paa "Padding All"
padding: EdgeInsets.all(${1:8.0}),
endsnippet
snippet pah "Padding Horizontal"
padding: EdgeInsets.symmetric(horizontal: ${0:0}),
endsnippet
snippet pav "Padding Vertical"
padding: EdgeInsets.symmetric(vertical: ${0:0}),
endsnippet
snippet pat "Padding Top"
padding: EdgeInsets.only(top: ${0:0}),
endsnippet
snippet pab "Padding Bottom"
padding: EdgeInsets.only(bottom: ${0:0}),
endsnippet
snippet pal "Padding Left"
padding: EdgeInsets.only(left: ${0:0}),
endsnippet
snippet par "Padding Right"
padding: EdgeInsets.only(right: ${0:0}),
endsnippet
snippet mar "Margin"
margin: EdgeInsets.only(${1:left: ${2:0}}${3:, right: ${4:0}}${5:, top: ${6:0}}${7:, bottom: ${8:0}}),
endsnippet
snippet mara "Margin All"
margin: EdgeInsets.all(${1:8.0}),
endsnippet
snippet marh "Margin Horizontal"
margin: EdgeInsets.symmetric(horizontal: ${0:0}),
endsnippet
snippet marv "Margin Vertical"
margin: EdgeInsets.symmetric(vertical: ${0:0}),
endsnippet
snippet mart "Margin Top"
margin: EdgeInsets.only(top: ${0:0}),
endsnippet
snippet marb "Margin Bottom"
margin: EdgeInsets.only(bottom: ${0:0}),
endsnippet
snippet marl "Margin Left"
margin: EdgeInsets.only(left: ${0:0}),
endsnippet
snippet marr "Margin Right"
margin: EdgeInsets.only(right: ${0:0}),
endsnippet
snippet marv "Margin Vertical"
margin: EdgeInsets.only(top: ${1:0}, bottom: ${1}),${0}
endsnippet
snippet br "BorderRadius"
borderRadius: BorderRadius.all(Radius.circular(${0})),
endsnippet
snippet sbr "Shape with BorderRadius"
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(${0})),
),
endsnippet
snippet dur "Duration"
duration: const Duration(milliseconds: ${0}),
endsnippet
snippet dec "BoxDecoration"
decoration: BoxDecoration(
color: ${1},
),${0}
endsnippet
snippet ba "BorderRadius"
border: Border.all(
width: ${1},
color: ${2},
),
endsnippet
snippet mai "MainAxis"
mainAxisAlignment: MainAxisAlignment.${0}
endsnippet
snippet crs "CrossAxis"
crossAxisAlignment: CrossAxisAlignment.${0}
endsnippet
snippet mainmin "MainAxisSize.min"
mainAxisSize: MainAxisSize.min
endsnippet
snippet row "Row"
Row(children: [
${0}
]),
endsnippet
snippet rowa "Row with alignment"
Row(
mainAxisAlignment: MainAxisAlignment.${1:start},
crossAxisAlignment: CrossAxisAlignment.${2:start},
children: [
${0}
],
),
endsnippet
snippet col "Column"
Column(children: [
${0}
]),
endsnippet
snippet cola "Column with alignment"
Column(
mainAxisAlignment: MainAxisAlignment.${1:start},
crossAxisAlignment: CrossAxisAlignment.${2:start},
children: [
${0}
],
),
endsnippet
snippet sta "Stack"
Stack(children: [
${0}
]),
endsnippet
snippet cs "const SizedBox()"
const SizedBox()${0}
endsnippet
snippet co "Container"
Container()${0}
endsnippet
snippet con "Container"
Container(
child: ${0},
)
endsnippet
snippet exp "Expanded"
Expanded(
child: ${0},
),
endsnippet
snippet flx "Flexible"
Flexible(
child: ${0},
),
endsnippet
snippet cons "Container Sized"
Container(
width: ${1},
height: ${2},
child: ${0},
)
endsnippet
snippet cen "Center"
Center(child: ${0})
endsnippet
snippet t "Text"
Text("${1}"),${0}
endsnippet
snippet ts "Text with text style"
Text(${1}, style: ${2}),${0}
endsnippet
snippet rts "Rich Text with text style"
RichText(
text: TextSpan(children: [
TextSpan(text: ${1}, style: ${2}),${0}
]),
),
endsnippet
snippet ss "TextStyle"
TStyle(c: ${1}, s: ${2:14}, w: F.w${3:5})${0}
endsnippet
snippet nbuilder "NotifierBuilder"
NotifierBuilder(
notifier: null,
builder: (context) {
return Container();
},
)
endsnippet
snippet sw "SizedBox with width"
const SizedBox(width: ${1}),${0}
endsnippet
snippet sh "SizedBox with height"
const SizedBox(height: ${1}),${0}
endsnippet
snippet swh "SizedBox with width and height"
SizedBox(width: ${1}, height: ${2}),${0}
endsnippet
snippet scaf "Scaffold"
Scaffold(
appBar: AppBar(
title: Text('${1:Title}'),
),
body: ${2:Container()}${0},
);
endsnippet
# snippet sf "New Stateful Widget" b
# class ${1:name} extends StatefulWidget {
# ${1:name}({super.key});
# @override
# _${1/([A-Za-z_]+).*/$1/}State createState() => _${1/([A-Za-z_]+).*/$1/}State();
# }
# class _${1/([A-Za-z_]+).*/$1/}State extends State<${1/([A-Za-z_]+).*/$1/}> {
# @override
# Widget build(context) {
# return ${2:Container()};
# }
# }
# endsnippet
snippet sf "New Stateful Widget" b
class ${1:MyState} extends StatefulWidget {
$1({super.key});
@override
_$1State createState() => _$1State();
}
class _$1State extends State<$1> {
@override
Widget build(context) {
return ${2:Container()};
}
}
endsnippet
snippet sl "New Stateless Widget" b
class ${1:name} extends StatelessWidget {
${1:name}({super.key});
@override
Widget build(context) {
return ${2:Container()};
}
}
endsnippet
snippet wt "Colors.white"
color: colorWhite,
endsnippet
snippet inits "initState"
@override
void initState() {
${0}
super.initState();
}
endsnippet
snippet dispose "dispose"
@override
void dispose() {
${0:}
super.dispose();
}
endsnippet
snippet listv "ListView.builder"
ListView.builder(
itemCount: ${1:1},
itemBuilder: (context, index) {
return ${2:Container()};
},
)
endsnippet
snippet future "Future Builder"
FutureBuilder(
future: ${1:Future},
initialData: ${2:InitialData},
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done)
return ${3:Container();}
return ${4:Container();}
},
)
endsnippet
snippet stream "Stream Builder"
StreamBuilder<${1:dynamic}>(
stream: ${2:yourStream},
builder: (context, snapshot) {
if (snapshot.hasData) {
// TODO: do something with the data
return ${3:Container()};
} else if (snapshot.hasError) {
// TODO: do something with the error
return ${4:Text(snapshot.error.toString())};
}
// TODO: the data is not ready, show a loading indicator
return ${5:Center(child: CircularProgressIndicator())};
},
),
endsnippet
snippet try "try catch"
try {
${0}
} catch (e, stack) {
print(e);
print(stack);
}
endsnippet
snippet for "standard for loop without brackets"
for (var ${1:i} = 0; ${1:i} < ${2:n}; ++${1:i})
${3:// TODO}
endsnippet
snippet forr "standard for loop"
for (var ${1:i} = 0; ${1:i} < ${2:n}; ++${1:i}) {
${3:// TODO}
}
endsnippet
snippet fori "For in loop"
for (var ${1:item} in ${2:object}) {
${3:// TODO}
}
endsnippet
snippet ssm "Multi-line Set State"
setState(() {
${1:// TODO}
});
endsnippet
snippet sss "Single-line Set State"
setState(() => ${1:/* TODO */} );
endsnippet
snippet sst "Empty Set State"
setState(() {})${0}
endsnippet
snippet rf "Request focus"
FocusScope.of(context).requestFocus(${1:FocusNode()})${0}
endsnippet
snippet rfn "Request focusnode (new)"
FocusScope.of(context).requestFocus(FocusNode());
endsnippet
snippet push "Navigator push"
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => ${1:Page()}),
)${0}
endsnippet
snippet pop "Navigator pop"
Navigator.of(context).pop(${1})${0}
endsnippet
snippet rmb "RawMaterialButton"
RawMaterialButton(
elevation: ${1:0},
onPressed: () {},
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(${2:5})),
),
fillColor: ${3:Colors.transparent},
child: ${5:Container()},
),
endsnippet
snippet mo "Get MediaQuery"
MediaQuery.of(context)${0}
endsnippet
snippet st "print();"
print(${0});
endsnippet
snippet sbj "Behavior subject"
Stream<${1:int}> get ${2:my}Stream => _${2:my}Subject.stream;
BehaviorSubject<${1}> _${2:my}Subject;
_${2:my}Subject = BehaviorSubject<${1}>();
endsnippet
snippet f "Function"
() =>
endsnippet
snippet adelay "await Future.delayed"
await Future.delayed(const Duration(milliseconds: ${1:300}));
endsnippet
snippet delay "Future.delayed"
Future.delayed(const Duration(milliseconds: ${1:300})).then((_) {
${2}
});
endsnippet
snippet now "DateTime.now()"
DateTime.now()
endsnippet
snippet rt "required this."
required this.${1}, ${0}
endsnippet
snippet posr "Positioned right"
Positioned(
top: ${1:0},
right: ${2:0},
bottom: ${3:0},
child: ${0:Container()},
),
endsnippet
snippet posl "Positioned left"
Positioned(
top: ${1:0},
left: ${2:0},
bottom: ${3:0},
child: ${0:Container()},
),
endsnippet
snippet post "Positioned top"
Positioned(
top: ${1:0},
left: ${2:0},
right: ${3:0},
child: ${0:Container()},
),
endsnippet
snippet posb "Positioned bottom"
Positioned(
bottom: ${1:0},
left: ${2:0},
right: ${3:0},
child: ${0:Container()},
),
endsnippet
snippet postr "Positioned top right"
Positioned(
top: ${1:0},
right: ${2:0},
child: ${3:Container()},
),
endsnippet
snippet posbl "Positioned bottom left"
Positioned(
bottom: ${1:0},
left: ${2:0},
child: ${3:Container()},
),
endsnippet
snippet posbr "Positioned bottom right"
Positioned(
bottom: ${1:0},
right: ${2:0},
child: ${3:Container()},
),
endsnippet
snippet postl "Positioned top left"
Positioned(
top: ${1:0},
left: ${2:0},
child: ${3:Container()},
),
endsnippet
snippet fa "fix add type"
// TYPEADD
endsnippet
snippet .f "fix add type" i
.forEach((${1:item}) {
${0:// TODO}
});
endsnippet

View file

@ -1,84 +0,0 @@
snippet checke "Check Error"
if err != nil {
return err
}
${0}
endsnippet
snippet no "utils.NoError"
if utils.NoError(err) {
${0}
}
endsnippet
snippet forr "For loop range"
for _, ${1:thing} := range ${2:things} {
${3://TODO}
}
endsnippet
snippet fori "For loop i"
for i := 0; i < n; i++ {
${1://TODO}
}
endsnippet
snippet re "Return Error if any"
if err != nil {
return err
}
${0}
endsnippet
snippet ie "Check Error"
if err != nil {
panic(err)
}
${0}
endsnippet
snippet st "Println"
fmt.Println(${1})${0}
endsnippet
snippet lt "Log Println"
log.Println(${1})${0}
endsnippet
snippet sf "Printf"
fmt.Printf("${1}\n")${0}
endsnippet
snippet lf "Log Printf"
log.Printf("${1}\n")${0}
endsnippet
snippet fn "Function"
func ${1:function}() {
${0: // todo}
}
endsnippet
snippet lt "Log Println"
log.Println(${1})${0}
endsnippet
snippet start "Starting code"
package main
import (
"fmt"
)
func main() {
fmt.Println("hello")
}
endsnippet
snippet cq "Current Question"
app.result.questions[app.curResultIndex]${0}
endsnippet
snippet fa "fix add type"
// TYPEADD
endsnippet

View file

@ -1,4 +0,0 @@
snippet st "System.out.Println();"
System.out.println(${0});
endsnippet

View file

@ -1,444 +0,0 @@
snippet st "console.log"
console.log(${0});
endsnippet
snippet fl "Firebase Function Log"
/*LOG*/ functions.logger.log(${0});
endsnippet
snippet f "Arrow Function"
(${1:arg}) => {
${0}
}
endsnippet
snippet fn "Empty Function"
function ${1:functionName}() {
${0}
}
endsnippet
snippet cf "Constant Function"
const ${1:funcName} = () => {
${0}
}
endsnippet
snippet ef "Export Function"
export function ${1:functionName}() {
${0}
}
endsnippet
snippet eaf "Export Async Function"
export async function ${1:functionName}() {
${0}
}
endsnippet
snippet eafa "Export Async Function With Args"
const ${1}DefaultArgs = {
${2}
};
export async function ${1:functionName}(options = ${1}DefaultArgs) {
options = { ...${1}DefaultArgs, ...options };
${0:// todo}
}
endsnippet
snippet ssr "NextJS ServerSide Rendering"
export async function getServerSideProps() {
return {
props: {
//
},
};
}
endsnippet
snippet ssg "NextJS ServerSide Generation"
export async function getStaticProps() {
return {
props: {
//
},
};
}
endsnippet
snippet rs "res.status"
res.status(${1:200}).send("${2:text}")${0}
endsnippet
snippet af "Async Arrow Function"
async (${1}) => {
${0}
}
endsnippet
snippet afn "Async Function"
async function ${1:FunctionName}() {
${0}
}
endsnippet
snippet try "Try Catch"
try {
//
} catch (e) {
console.error(e);
}
endsnippet
snippet eh "Error Handler"
return await errorHandler(async () => {
${0:// Todo}
});
endsnippet
snippet c "Comment Block"
/*
* ${0}
*/
endsnippet
snippet pm "@param"
@param ${1:parameter}: ${0:description}
endsnippet
# React & JSX
snippet t "Tag"
<${1:div}>
${2}
</${1}>
${0}
endsnippet
snippet ta "Tag with Attributes"
<${1:div} ${2:className=""}>
${3}
</${1}>
${0}
endsnippet
snippet ti "Tag Inline"
<${1} />
${0}
endsnippet
snippet br "<br />"
<br />
endsnippet
snippet rrcc "React Redux Class Component" b
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import styles from './${2:$1}.css';
class ${1:`!v expand('%:t:r')`} extends Component {
static propTypes = {
children: PropTypes.node,
className: PropTypes.string,
dispatch: PropTypes.func.isRequired,
};
constructor(props) {
super(props);
}
render() {
return (
<div className={styles.base}>
$3
</div>
);
}
}
function mapStateToProps(state) {
return {};
}
export default connect(mapStateToProps)($1);
endsnippet
snippet rcc "React Class Component" b
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import styles from './${2:$1}.css';
class ${1:`!v expand('%:t:r')`} extends Component {
static propTypes = {
${2:children: PropTypes.node,
className: PropTypes.string,}
};
constructor(props) {
super(props);
}
render() {
return (
<${3:div} className={styles.base}>
$0
</$3>
);
}
}
export default $1;
endsnippet
snippet rfc "React Functional Component" b
import React from 'react';
import PropTypes from 'prop-types';
import styles from './${2:$1}.css';
function ${1:`!v expand('%:t:r')`}({ $3 }) {
return (
<${5:div} className={styles.base}>
$0
</$5>
);
}
$1.defaultProps = {$4};
$1.propTypes = {`!p
props = t[3]
if props:
snip >> 1
for prop in props.split(', '):
snip += prop + ': PropTypes.any,'
`
};
export default $1;
endsnippet
snippet rsc "React Styled Component" b
import styled from 'styled-components';
const ${1:`!v expand('%:t:r')`} = styled.${2:div}\`
$3
\`;
export default $1;
endsnippet
snippet rsci "React Styled Component Interpolation" b
import styled, { css } from 'styled-components';
const ${1:`!v expand('%:t:r')`} = styled.${2:div}\`${props => css\`
${3:${props.$4 && \`
$5
\`}}
\`}\`;
export default $1;
endsnippet
snippet pp "Get Props"
${props => props.${1}};
endsnippet
snippet cn "className"
className="$1"
endsnippet
snippet dp "Default Props" b
${1:`!v expand('%:t:r')`.}defaultProps = {
$2
};
endsnippet
snippet set "Set State"
this.setState({
${1}: ${2}
});
endsnippet
snippet props "Get Property" i
this.props.${1}
endsnippet
snippet state "Get State" i
this.state.${1}
endsnippet
snippet ref "Ref" i
ref={${1:ref} => { this.${2:name} = $1; }}
endsnippet
# Component Lifecycle
snippet cwm "Component Will Mount" b
componentWillMount() {
$1
}
endsnippet
snippet cdm "Component Did Mount" b
componentDidMount() {
$1
}
endsnippet
snippet cwrp "Component Will Receive Props" b
componentWillReceiveProps(nextProps) {
$1
}
endsnippet
snippet scup "Should Component Update" b
shouldComponentUpdate(nextProps, nextState) {
$1
}
endsnippet
snippet cwup "Component Will Update" b
componentWillUpdate(nextProps, nextState) {
$1
}
endsnippet
snippet cdup "Component Did Update" b
componentDidUpdate(prevProps, prevState) {
$1
}
endsnippet
snippet cwu "Component Will Unmount" b
componentWillUnmount() {
$1
}
endsnippet
snippet ren "Render"
render() {
return ${1:(
${2:<div>${3}</div>}
);}
}
endsnippet
# PropTypes
snippet pt "PropTypes Definition" b
${1:`!v expand('%:t:r')`.}propTypes = {
${2:className}: ${3:PropTypes.string},
};
endsnippet
snippet pt.a "PropTypes Array" w
PropTypes.array${1:,}
endsnippet
snippet pt.b "PropTypes Boolean" w
PropTypes.bool${1:,}
endsnippet
snippet pt.f "PropTypes Function" w
PropTypes.func${1:,}
endsnippet
snippet pt.n "PropTypes Number" w
PropTypes.number${1:,}
endsnippet
snippet pt.o "PropTypes Object" w
PropTypes.object${1:,}
endsnippet
snippet pt.s "PropType String" w
PropTypes.string${1:,}
endsnippet
snippet pt.no "PropTypes Node" w
PropTypes.node${1:,}
endsnippet
snippet pt.e "PropTypes Element" w
PropTypes.element${1:,}
endsnippet
snippet pt.io "PropTypes instanceOf" w
PropTypes.instanceOf(${2:PropTypes.string})${1:,}
endsnippet
snippet pt.one "PropTypes oneOf" w
PropTypes.oneOf(['$2'$3])${1:,}
endsnippet
snippet pt.onet "PropTypes oneOfType" w
PropTypes.oneOfType([
$2
])${1:,}
endsnippet
snippet pt.ao "PropTypes arrayOf" w
PropTypes.arrayOf(${2:PropTypes.string})${1:,}
endsnippet
snippet pt.oo "PropTypes objectOf" w
PropTypes.objectOf(${2:PropTypes.string})${1:,}
endsnippet
snippet pt.sh "PropTyes Shape" w
PropTypes.shape({
$2
})${1:,}
endsnippet
snippet ir "isRequired" w
isRequired,
endsnippet
snippet rs "React useState"
const [$1, set${1}] = useState(${0:''})
endsnippet
snippet test "Test"
test("${1:test}", ${2:async}() => {
${3:// ...}
});
endsnippet
snippet ex "Expect"
expect(${1:1+1}).toBe(${2:2});
endsnippet
snippet route "New Route"
import express from "express";
const ${1:some}Routes = express.Router();
${0:// TODO}
export default ${1:some}Routes;
endsnippet
snippet l "log"
log(${0});
endsnippet
snippet ehs "errorHandlers.silent"
await errorHandlers.silent(async () => {
${0:// todo}
});
endsnippet
snippet eha "errorHandlers.safe"
await errorHandlers.safe({
action: async () => {
${0:// todo}
},
teardown: async () => {
// todo
},
});
endsnippet

View file

@ -1,11 +0,0 @@
snippet f "Empty function"
function ()
${0}
end
endsnippet
snippet conf "Config function"
config = function ()
${0}
end
endsnippet

View file

@ -1,10 +0,0 @@
snippet th "Table Heading"
| ${1:Key} | ${2:Value} |
|-|-|
${0}
endsnippet
snippet tr "Table Row"
| ${1:Term} | ${2:Definition} |
${0}
endsnippet

View file

@ -1,8 +0,0 @@
snippet pri "print"
print(${0})
endsnippet
snippet main "__main__"
if __name__ == '__main__':
${0}
endsnippet

View file

@ -1,9 +0,0 @@
snippet fn "Function"
(define (${1:name} [${2:arg : Real}]) : Real
${0:(+ 1 1)})
endsnippet
snippet st "print();"
(displayln ${0})
endsnippet

View file

@ -1,4 +0,0 @@
snippet st "print"
print(${0})
endsnippet

View file

@ -1,9 +0,0 @@
# snip
snippet mid "\mid \mid"
\\mid ${1} \\mid ${0}
endsnippet
snippet srt "\sqrt{}"
\\sqrt{${1}} ${0}
endsnippet

View file

@ -1,38 +0,0 @@
snippet ssg "NextJS ServerSide Generation"
export async function getStaticProps() {
return {
props: {
//
},
};
}
endsnippet
snippet t "Tag"
<${1:div}>
${2}
</${1}>
${0}
endsnippet
snippet ta "Tag with Attributes"
<${1:div} ${2:className=""}>
${3}
</${1}>
${0}
endsnippet
snippet tn "Tag with class Names"
<${1:div} className="${2}">
${0}
</${1}>
endsnippet
snippet ti "Tag Inline"
<${1} />
${0}
endsnippet
snippet br "<br />"
<br />
endsnippet

View file

@ -1,7 +0,0 @@
snippet sec "Comment Section"
" ===
" === ${1:New Section}
" ===
${0}
endsnippet

View file

@ -6,7 +6,7 @@ if vim.g.neovide then
vim.o.guifont = "Source Code Pro:h16" -- text below applies for VimScript
vim.g.neovide_transparency = 0.75
-- 全屏在i3和sway的配置中设置了并且速度更快
vim.g.neovide_fullscreen = true
-- vim.g.neovide_fullscreen = true
end
-- ===

View file

@ -38,6 +38,8 @@ vim.o.updatetime = 100
vim.o.mouse = 'a'
-- 开启颜色
vim.o.termguicolors = true
-- 将updatetime设置为较低的值以提高性能
vim.opt.updatetime = 200
-- 设置编码格式
vim.o.fileencodings = 'utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1'

View file

@ -145,6 +145,52 @@ mapkey("x", ">", ">gv")
mapkey("x", "<s-tab>", "<gv")
mapkey("x", "<tab>", ">gv")
-- ===
-- === 批量替换
-- ===
-- 设置快捷键,替换所有文件内容
mapcmd("<leader>sa", "lua search_and_replace()")
-- 设置快捷键,替换当前文件内容
mapcmd("<leader>sr", "lua search_and_replace_current_file()")
-- 替换当前目录及子目录下所有文件内容
function search_and_replace()
-- 获取用户输入的查找内容,使用 input() 函数动态输入替换内容
local search_text = vim.fn.input("Search for: ")
-- 获取用户输入的替换内容
local replace_text = vim.fn.input("Replace with: ")
-- 执行替换命令
if search_text ~= "" and replace_text ~= "" then
local cmd = 'execute "!grep -rl \\"' .. search_text .. '\\" ./ | xargs sed -i \\"s/' .. search_text .. '/' .. replace_text .. '/g\\""'
vim.cmd(cmd)
print("Replaced all occurrences of '" .. search_text .. "' with '" .. replace_text .. "'")
else
print("Search or replace text cannot be empty.")
end
end
-- 替换当前文件内容
function search_and_replace_current_file()
-- 获取用户输入的查找内容
local search_text = vim.fn.input("Search for in current file: ")
-- 获取用户输入的替换内容
local replace_text = vim.fn.input("Replace with: ")
-- 执行替换命令
if search_text ~= "" and replace_text ~= "" then
-- 使用 sed 替换当前文件中的匹配内容,并正确转义引号
local cmd = string.format('!sed -i \'s/%s/%s/g\' %%', search_text, replace_text)
vim.cmd(cmd)
print("Replaced all occurrences of '" .. search_text .. "' with '" .. replace_text .. "' in current file.")
else
print("Search or replace text cannot be empty.")
end
end
-- ===
-- === Other useful stuff
-- ===
@ -159,9 +205,8 @@ mapkey("", "<LEADER><LEADER>", "<Esc>/<++><CR>:nohlsearch<CR>c4l")
mapcmd("<LEADER>sc", "set spell!")
-- 运行代码
vim.cmd([[
au filetype dart noremap r :wall<cr>:term tmux a <cr>
au filetype dart noremap r :wall<cr>:Telescope flutter commands<cr>
au filetype python noremap r :wall<cr>:set splitbelow<cr>:sp<cr>:term python %<cr>
au filetype go noremap r :wall<cr>:set splitbelow<cr>:sp<cr>:term go run %<cr>
au filetype markdown noremap r :MarkdownPreview<cr>

View file

@ -18,11 +18,17 @@ vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
vim.keymap.set("n", "<leader>l", ":Lazy<CR>", { noremap = true })
require("lazy").setup({
-- cmp自动补全
require("lazy.plugins.autocomplete").config,
require("lazy.plugins.blinkcmp"),
-- lsp配置全局的错误和警告提示修复建议重命名变量格式化代码等等
require("lazy.plugins.lspconfig"),
-- ai编程助手Fitten Code
require("lazy.plugins.fittencode"),
-- 免费大语言模型 (LLM) 支持
require("lazy.plugins.llm"),
-- 顶部的winbar,可以鼠标点击
require("lazy.plugins.winbar"),
-- command line浮动弹窗
require("lazy.plugins.cmdline"),
-- 代码函数名称浏览时固定,`[c`可以跳转到上下文
require("lazy.plugins.stickyScroll"),
-- fold折叠根据treesitter来折叠可以兼容我设置的<leader>o快捷键
@ -51,6 +57,8 @@ require("lazy").setup({
require("lazy.plugins.pairs"),
-- flutter
require("lazy.plugins.flutter"),
-- 用于改进在 Neovim 中查看 Markdown 文件的插件
require("lazy.plugins.render-markdown"),
-- markdown preview
require("lazy.plugins.markdownpreview"),
-- 底部状态栏+主题 themes
@ -59,10 +67,12 @@ require("lazy").setup({
require("lazy.plugins.comment"),
-- 文件缓冲标签栏
require("lazy.plugins.bufferline"),
-- explorer tree 文件列表,现在已经换成yazi fm-nvim启动joshuto ranger Lazygit
-- explorer tree 文件列表,现在已使用yazi
require("lazy.plugins.filemanager"),
-- minifiles也是文件管理器功能较少
require("lazy.plugins.minifiles"),
-- crtl+g快捷键在neovim中启动lazygit
require("lazy.plugins.lazygit"),
-- telescope模糊查找
require("lazy.plugins.telescope"),
-- 代码雨插件
@ -72,9 +82,13 @@ require("lazy").setup({
-- sudo write
require("lazy.plugins.suda"),
-- jump使用flash.nvim插件实现f单个字母时按f下一处建议先esc退出再可视模式此时才可以继续使用f斜杠粘贴整个单词查找的时候不好用
-- require("lazy.plugins.jump"),
require("lazy.plugins.jump"),
-- which-key使用多个字母快捷键停留时会提示
-- require("lazy.plugins.whichkey"),
-- cw推荐的indent缩进线hlchunk可以根据线条的款式来分辨缩进
-- require("lazy.plugins.indent"),
-- ai编程助手supermaven
-- require("lazy.plugins.supermaven"),
-- 自动补全插件
-- require("lazy.plugins.autocomplete").config,
})

View file

@ -68,14 +68,14 @@ M.config = {
['<c-o>'] = cmp.mapping.complete(),
['<c-space>'] = cmp.mapping.complete(),
-- 代码片段下一处位置
["<c-e>"] = cmp.mapping(
["<c-h>"] = cmp.mapping(
function()
cmp_ultisnips_mappings.compose { "expand", "jump_forwards" } (function() end)
end,
{ "i", "s", --[[ "c" (to enable the mapping in command mode) ]] }
),
-- 代码片段上一处位置
["<c-n>"] = cmp.mapping(
["<c-l>"] = cmp.mapping(
function(fallback)
cmp_ultisnips_mappings.jump_backwards(fallback)
end,
@ -104,6 +104,7 @@ M.config = {
c = function(fallback)
if cmp.visible() then
cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })
cmp.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = false })
else
fallback()
end
@ -135,6 +136,7 @@ M.config = {
{ name = 'path' }, -- 本地路径补全
{ name = 'nvim_lsp' },
{ name = 'ultisnips' }, -- For ultisnips users.
{ name = 'fittencode', group_index = 1 },
}, {
{ name = 'buffer' },
})

View file

@ -0,0 +1,66 @@
return {
'saghen/blink.cmp',
dependencies = 'rafamadriz/friendly-snippets',
version = '*',
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
keymap = {
preset = 'none',
['<C-space>'] = { 'show', 'show_documentation', 'hide_documentation' },
-- ['<C-e>'] = { 'hide' },
-- fallback命令将运行下一个非闪烁键盘映射(回车键的默认换行等操作需要)
['<CR>'] = { 'accept', 'fallback' }, -- 'select_and_accept'会选择第一项插入
['<S-Tab>'] = { 'select_prev', 'snippet_backward', 'fallback' },
['<Tab>'] = { 'select_next', 'snippet_forward', 'fallback' },
['<C-b>'] = { 'scroll_documentation_up', 'fallback' },
['<C-f>'] = { 'scroll_documentation_down', 'fallback' },
['<C-e>'] = { 'snippet_forward', 'fallback' },
['<C-u>'] = { 'snippet_backward', 'fallback' },
},
completion = {
-- 示例:使用'prefix'对于'foo_|_bar'单词将匹配'foo_'(光标前面的部分),使用'full'将匹配'foo__bar'(整个单词)
keyword = { range = 'full' },
-- 选择补全项目时显示文档(0.5秒延迟)
documentation = { auto_show = true, auto_show_delay_ms = 500 },
-- 不预选第一个项目,选中后自动插入该项目文本
list = { selection = { preselect = false, auto_insert = true } },
},
-- 指定文件类型启用/禁用
enabled = function()
return not vim.tbl_contains({
-- "lua",
-- "markdown"
}, vim.bo.filetype)
and vim.bo.buftype ~= "prompt"
and vim.b.completion ~= false
end,
appearance = {
-- 将后备高亮组设置为 nvim-cmp 的高亮组
-- 当您的主题不支持眨眼.cmp 时很有用
-- 将在未来版本中删除
use_nvim_cmp_as_default = true,
-- 将“Nerd Font Mono”设置为“mono”将“Nerd Font”设置为“normal”
-- 调整间距以确保图标对齐
nerd_font_variant = 'mono'
},
-- 已定义启用的提供程序的默认列表,以便您可以扩展它
sources = {
default = { 'buffer', 'lsp', 'path', 'snippets', },
providers = {
-- score_offset设置优先级数字越大优先级越高
buffer = { score_offset = 3 },
lsp = { score_offset = 2 },
path = { score_offset = 1 },
snippets = { score_offset = 4 },
}
},
},
-- 由于“opts_extend”您的配置中的其他位置无需重新定义它
opts_extend = { "sources.default" }
}

View file

@ -0,0 +1,34 @@
return {
"folke/noice.nvim",
event = "VeryLazy",
dependencies = {
-- if you lazy-load any plugin below, make sure to add proper `module="..."` entries
"MunifTanjim/nui.nvim",
-- OPTIONAL:
-- `nvim-notify` is only needed, if you want to use the notification view.
-- If not available, we use `mini` as the fallback
"rcarriga/nvim-notify",
},
config = function()
require("noice").setup({
lsp = {
-- override markdown rendering so that **cmp** and other plugins use **Treesitter**
override = {
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
["vim.lsp.util.stylize_markdown"] = true,
["cmp.entry.get_documentation"] = true, -- requires hrsh7th/nvim-cmp
},
},
-- you can enable a preset for easier configuration
presets = {
bottom_search = true, -- use a classic bottom cmdline for search
command_palette = true, -- position the cmdline and popupmenu together
long_message_to_split = true, -- long messages will be sent to a split
inc_rename = false, -- enables an input dialog for inc-rename.nvim
lsp_doc_border = false, -- add a border to hover docs and signature help
},
})
end
}

View file

@ -1,62 +1,13 @@
-- ===
-- === explorer tree 文件列表 fm-nvim启动joshuto ranger Lazygit
-- === explorer tree 文件列表
-- ===
return {
"DreamMaoMao/yazi.nvim", -- 使用yazi替代joshuto和ranger,仍然使用fm-nvim来启动lazygit
dependencies = {
"nvim-telescope/telescope.nvim",
"nvim-lua/plenary.nvim",
'is0n/fm-nvim',commit = 'ad7b80dc99cb8b14977f7ea233a9a299dc8879c0', -- 这个提交解决了joshuto无法启动的问题
},
"mikavilpas/yazi.nvim", -- 使用yazi替代joshuto和ranger,仍然使用fm-nvim来启动lazygit
event = "VeryLazy",
keys = {
{ "tt", "<cmd>Yazi<CR>", desc = "Toggle Yazi" },
{ "<c-g>", "<cmd>Lazygit<CR>", desc = "Toggle Lazygit" },
},
config = function()
require('fm-nvim').setup{
-- UI Options
ui = {
float = {
-- Floating window border (see ':h nvim_open_win')
border = "single",
-- Num from 0 - 1 for measurements
height = 0.9,
width = 0.8,
},
},
}
end
}
-- local map = require("core.keymap")
-- -- 打开文件树
-- -- map:cmd('tt', "Ranger")
-- map:cmd('tt', "Joshuto")
-- -- 使用lazygit
-- map:cmd('<c-g>', "Lazygit")
-- return {
-- 'is0n/fm-nvim',
-- commit = 'ad7b80dc99cb8b14977f7ea233a9a299dc8879c0', -- 这个提交解决了joshuto无法启动的问题
-- config = function()
-- require('fm-nvim').setup{
-- -- UI Options
-- ui = {
-- float = {
-- -- Floating window border (see ':h nvim_open_win')
-- border = "single",
-- -- Num from 0 - 1 for measurements
-- height = 0.9,
-- width = 0.8,
-- },
-- },
-- -- Terminal commands used w/ file manager (have to be in your $PATH)
-- cmds = {
-- joshuto_cmd = "",
-- },
-- }
-- end
-- }

View file

@ -0,0 +1,23 @@
-- ===
-- === 一个ai编程助手
-- ===
return {
'luozhiya/fittencode.nvim',
config = function()
require('fittencode').setup({
-- completion_mode ='source',
keymaps = {
inline = {
['<S-CR>'] = 'accept_all_suggestions', -- 接受所有建议
['<C-i>'] = 'accept_line', -- 接受当前行
-- ['<C-i>'] = 'accept_word', -- 接受当前单词
['<C-n>'] = 'revoke_line', -- 撤销当前行
-- ['<C-n>'] = 'revoke_word', -- 撤销当前单词
['<c-\\>'] = 'triggering_completion', -- 触发补全
},
},
})
end,
}

View file

@ -1,17 +1,59 @@
-- ===
-- === flutter-tools
-- ===
return {
'akinsho/flutter-tools.nvim',
'nvim-flutter/flutter-tools.nvim',
lazy = false,
dependencies = {
'nvim-lua/plenary.nvim',
'dart-lang/dart-vim-plugin',
'stevearc/dressing.nvim', -- optional for vim.ui.select
'mfussenegger/nvim-dap',
},
ft= {"dart"},
lazy = true,
config = function()
require("flutter-tools").setup {} -- use defaults
require("telescope").load_extension("flutter")
require("flutter-tools").setup {
ui = {
border = "rounded",
notification_style = "native",
},
decorations = {
statusline = {
app_version = true,
device = true,
},
},
widget_guides = {
enabled = true, -- 轮廓窗口的缩进参考线
debug = true,
},
closing_tags = {
highlight = "Comment",
prefix = "// ",
enabled = true,
},
lsp = {
color = {
enabled = true,
background = true,
foreground = false,
virtual_text = false,
virtual_text_str = "",
},
settings = {
showTodos = true,
enableSnippets = true,
completeFunctionCalls = false,
},
},
debugger = {
enabled = true,
run_via_dap = false,
},
dev_log = {
enabled = true,
open_cmd = "edit", -- 用于打开日志缓冲区的命令,可以设置为"tabedit"或"split"或者"vsplit"缓冲区将在不同位置打开
},
} -- use defaults
end
}

View file

@ -0,0 +1,15 @@
-- ===
-- === 在neovim中启动lazygit
-- ===
return {
"kdheepak/lazygit.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
},
keys = {
{ "<c-g>", "<cmd>LazyGit<CR>", desc = "Toggle Lazygit" },
},
config = function()
end
}

45
lua/lazy/plugins/llm.lua Normal file
View file

@ -0,0 +1,45 @@
return {
"Kurama622/llm.nvim",
dependencies = { "nvim-lua/plenary.nvim", "MunifTanjim/nui.nvim" },
cmd = { "LLMSesionToggle", "LLMSelectedTextHandler" },
config = function()
require("llm").setup({
prompt = "请用中文回答",
prefix = {
user = { text = "😃 ", hl = "Title" },
assistant = { text = "", hl = "Added" },
},
url = "http://localhost:11434/api/chat", -- your url
model = "qwen2.5-coder:0.5b",
streaming_handler = function(chunk, line, assistant_output, bufnr, winid, F)
if not chunk then
return assistant_output
end
local tail = chunk:sub(-1, -1)
if tail:sub(1, 1) ~= "}" then
line = line .. chunk
else
line = line .. chunk
local status, data = pcall(vim.fn.json_decode, line)
if not status or not data.message.content then
return assistant_output
end
assistant_output = assistant_output .. data.message.content
F.WriteContent(bufnr, winid, data.message.content)
line = ""
end
return assistant_output
end,
keys = {
-- The keyboard mapping for the input window.
["Input:Submit"] = { mode = "n", key = "<s-cr>" },
},
})
end,
keys = {
{ "<leader>ac", mode = "n", "<cmd>LLMSessionToggle<cr>" },
{ "<leader>ae", mode = "v", "<cmd>LLMSelectedTextHandler 请解释下面这段代码<cr>" },
{ "<leader>t", mode = "x", "<cmd>LLMSelectedTextHandler 英译汉<cr>" },
},
}

View file

@ -3,8 +3,9 @@ return {
branch = 'v3.x',
dependencies = {
{ 'neovim/nvim-lspconfig' },
{'williamboman/mason.nvim'},
{'williamboman/mason-lspconfig.nvim'},
{ 'saghen/blink.cmp' },
{ 'williamboman/mason.nvim' },
{ 'williamboman/mason-lspconfig.nvim' },
{
"MysticalDevil/inlay-hints.nvim",
event = "LspAttach",
@ -27,16 +28,16 @@ return {
lsp_zero.on_attach(function(client, bufnr)
lsp_zero.default_keymaps({ buffer = bufnr })
local opts = { buffer = bufnr }
vim.keymap.set('n', '<leader>h', vim.lsp.buf.hover, opts) -- <space>h显示提示文档
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) -- gd跳转到定义的位置
vim.keymap.set('n', 'go', vim.lsp.buf.type_definition, opts) -- go跳转到变量类型定义的位置
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) -- gr跳转到引用了对应变量或函数的位置
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts) -- <space>rn变量重命名
vim.keymap.set('n', '<leader>h', vim.lsp.buf.hover, opts) -- <space>h显示提示文档
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) -- gd跳转到定义的位置
vim.keymap.set('n', 'go', vim.lsp.buf.type_definition, opts) -- go跳转到变量类型定义的位置
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) -- gr跳转到引用了对应变量或函数的位置
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts) -- <space>rn变量重命名
vim.keymap.set({ 'n', 'x' }, '<leader>f', function() vim.lsp.buf.format({ async = true }) end, opts) -- <space>f进行代码格式化
vim.keymap.set('n', '<leader>aw', vim.lsp.buf.code_action, opts) -- <space>aw可以在出现警告或错误的地方打开建议的修复方法
vim.keymap.set('n', '<leader>d', vim.diagnostic.open_float, opts) -- <space>d浮动窗口显示所在行警告或错误信息
vim.keymap.set('n', '<leader>-', vim.diagnostic.goto_prev, opts) -- <space>-跳转到上一处警告或错误的地方
vim.keymap.set('n', '<leader>=', vim.diagnostic.goto_next, opts) -- <space>+跳转到下一处警告或错误的地方
vim.keymap.set('n', '<leader>aw', vim.lsp.buf.code_action, opts) -- <space>aw可以在出现警告或错误的地方打开建议的修复方法
vim.keymap.set('n', '<leader>d', vim.diagnostic.open_float, opts) -- <space>d浮动窗口显示所在行警告或错误信息
vim.keymap.set('n', '<leader>-', vim.diagnostic.goto_prev, opts) -- <space>-跳转到上一处警告或错误的地方
vim.keymap.set('n', '<leader>=', vim.diagnostic.goto_next, opts) -- <space>+跳转到下一处警告或错误的地方
end)
-- “符号栏”是行号旁边的装订线中的一个空格。当一行中出现警告或错误时Neovim 会向您显示一个字母
lsp_zero.set_sign_icons({
@ -51,12 +52,10 @@ return {
ensure_installed = servers -- 直接把前面的servers列表传递过来
})
-- cmp相关配置通过for读取servers列表循环批量激活语言服务
local capabilities = require("cmp_nvim_lsp").default_capabilities()
local lspconfig = require('lspconfig')
for _, lsp in ipairs(servers) do
lspconfig[lsp].setup {
-- on_attach = my_custom_on_attach,
capabilities = capabilities,
capabilities = require('blink.cmp').get_lsp_capabilities(),
settings = {
gopls = {
hints = { -- gopls开启hints

View file

@ -8,6 +8,8 @@ return {
go_in_plus = 'i',
go_out = 'N',
go_out_plus = 'n',
mark_goto = "'",
mark_set = 'm',
reset = '<BS>',
reveal_cwd = '@',
show_help = 'g?',

View file

@ -0,0 +1,9 @@
return {
'MeanderingProgrammer/render-markdown.nvim',
dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.nvim' }, -- if you use the mini.nvim suite
---@module 'render-markdown'
---@type render.md.UserConfig
opts = {
sign = { enabled = false },
},
}

View file

@ -0,0 +1,15 @@
-- ===
-- === 一个ai编程助手号称是最快的copilot
-- ===
return {
"supermaven-inc/supermaven-nvim",
config = function()
require("supermaven-nvim").setup({
keymaps = {
accept_suggestion = "<S-CR>",
clear_suggestion = "<C-n>",
accept_word = "<C-i>",
},
})
end
}

View file

@ -1,4 +1,3 @@
-- 可视视图下
return {
"kraftwerk28/gtranslate.nvim",
dependencies = "nvim-lua/plenary.nvim",
@ -11,3 +10,30 @@ return {
end
}
-- return{
-- "JuanZoran/Trans.nvim",
-- build = function () require'Trans'.install() end,
-- keys = {
-- -- 可以换成其他你想映射的键
-- { 'tr', mode = { 'n', 'x' }, '<Cmd>Translate<CR>', desc = '󰊿 Translate' },
-- { 'tk', mode = { 'n', 'x' }, '<Cmd>TransPlay<CR>', desc = ' Auto Play' },
-- -- 目前这个功能的视窗还没有做好可以在配置里将view.i改成hover
-- { 'ti', '<Cmd>TranslateInput<CR>', desc = '󰊿 Translate From Input' },
-- },
-- dependencies = { 'kkharji/sqlite.lua', },
-- opts = {
-- dir = os.getenv 'HOME' .. '/.vim/dict',
-- theme = 'dracula', -- default | tokyonight | dracula
-- frontend = {
-- hover = {
-- keymaps = {
-- pageup = '<C-u>',
-- pagedown = '<C-e>',
-- pin = '<leader>[',
-- close = '<leader>]',
-- toggle_entry = '<leader>;',
-- }
-- }
-- }
-- }
-- }

37
snippets/lua.json Normal file
View file

@ -0,0 +1,37 @@
{
"sec": {
"prefix": "sec",
"body": [
"-- ===",
"-- === ${0}",
"-- ==="
],
"description": "Section comment"
},
"return": {
"prefix": "return",
"body": [
"return {",
"\t${1}",
"\tconfig = function()",
"\t\t${2}",
"\tend",
"}"
],
"description": "Return with config function"
},
"require_keymap": {
"prefix": "require_keymap",
"body": [
"local map = require(\"core.keymap\")"
],
"description": "Require keymap for Neovim"
},
"require_plugins": {
"prefix": "require_plugins",
"body": [
"require(\"lazy.plugins.${0}\")"
],
"description": "Require plugins for Neovim"
}
}